Kompilierungsfehler bei der rekursiven variadischen Template-Funktion

8

Ich habe einen einfachen variadischen Template-Test in Code :: Blocks vorbereitet, bekomme aber einen Fehler:

  

Keine passende Funktion für den Aufruf von 'OutputSizes ()'

Hier ist mein Quellcode:

%Vor%

Ich verwende GNU GCC mit -std=C++0x . Die Verwendung von -std=gnu++0x macht keinen Unterschied.

    
Maxpm 17.02.2011, 23:12
quelle

2 Antworten

13

So entschlüsseln Sie den Basisfall:

%Vor%     
Howard Hinnant 17.02.2011, 23:22
quelle
2

Es liegt daran, dass Sie keinen Basisfall angegeben haben. Sie haben den letzten Datentyp des Variadic-Vorlagenparameters extrahiert. Anschließend haben Sie versucht, einen leeren Variadic-Parameter mit einer Funktion zu vergleichen, die einen Typ und einen Variadic-Parameter verwendet. Sie müssen einen "Basisfall" angeben, wenn der Variadic-Parameter leer ist.

%Vor%

Bearbeiten: Die Überladungen mit vielen Nullwerten, die ich hier gezeigt habe, funktionieren nur, wenn Sie auch tatsächliche Laufzeitargumente basierend auf den Vorlagentypen nehmen. Wenn Sie nur Template-Parameter direkt verwenden, verwenden Sie eine Rekursion wie in Howard Hinnants Antwort gezeigt.

    
Puppy 17.02.2011 23:14
quelle