Vorlagenvorlagenparameter und variadische Vorlagen mit gcc 4.4

9

Ich benutze gcc 4.4 auf Debian Squeeze. Betrachten Sie den folgenden Code.

%Vor%

Die Idee ist also, dass T mit string , C mit map übereinstimmt und das Template-Parameterpaket Args mit int übereinstimmt. Ich habe vielleicht etwas von der Syntax falsch, bitte korrigieren Sie wenn ja. Insbesondere wenn das erste Template-Argument in class C mit T übereinstimmt und der Rest mit dem Template-Parameterpaket Args übereinstimmt, ist template <typename T, typename... Args> class C die korrekte Syntax?

Dies ergibt den Fehler

%Vor%

Dies scheint der Frage Variadic Vorlagenvorlagen und der perfekten Weiterleitung . Diese Frage legt nahe, dass dies ein gcc-Fehler ist, aber vielleicht täusche ich mich, wenn ich denke, dass diese Fragen in etwa gleich sind.

Bitte sei sanft. Mein Wissen über variadische Vorlagen ist weniger als 12 Stunden alt; Ich habe gerade versucht, alten C ++ - Code neu zu schreiben, um die Duplizierung zu reduzieren. Es ist auch schon eine Weile her, seit ich C ++ gemacht habe. Wenn es einen Workaround gibt, lass es mich wissen. Danke.

BEARBEITEN: Der Workaround, der in den Kommentaren von Variadic Vorlagenvorlagen und perfekter Weiterleitung von Ise Wisteria arbeitete für mich, was darauf hindeutet, dass dies der gleiche Fehler ist. Natürlich bin ich jetzt (a) sich fragen, wie zerbrechlich diese Problemumgehung ist und (b) warum es funktioniert und was Ise motiviert hat, darüber nachzudenken. Obwohl ich denke, nur Ise kann das letzte Bit beantworten. : -)

    
Faheem Mitha 15.12.2011, 03:05
quelle

2 Antworten

3

Wie in den Änderungen besprochen, scheint meine Frage den gleichen Fehler wie die verknüpfte Frage zu haben, Variadic Vorlage Vorlagen und perfekte Weiterleitung . Insbesondere funktioniert die in einem Link angegebene Problemumgehung auch in meinem Fall. Der modifizierte Code, der funktioniert, ist wie folgt:

%Vor%     
Faheem Mitha 15.12.2011, 04:21
quelle
0

Ich denke nicht, dass variadische Template-Parameter nicht-variadische Argumente in g ++ 4.4 erfüllen können, also müssen Sie Ihre foo-Funktion mit einer nicht-variadischen Version überladen.

Denken Sie auch daran, dass Map tatsächlich mehr als zwei Template-Parameter hat und daher auch nicht mit der neuen foo-Funktion übereinstimmt.

Dieser Zusatz zu Ihrem Beispiel sollte es verdeutlichen:

%Vor%     
masaers 15.12.2011 03:32
quelle