Warum wird in C ++ 11 nach einem Typparameterpack ein Integralwert-Parameterpaket nicht zugelassen?

8

Die Frage macht ohne ein Beispiel fast keinen Sinn. Also hier ist, was ich versuche zu tun.

Im Allgemeinen erlaubt C ++ Folgendes:

%Vor%

Aber es scheint, dass seine natürliche variadische Erweiterung nicht funktioniert.

%Vor%

Sowohl clang als auch g ++ 4.7 lehnen den obigen Code ab. Der Fehler wird dort angezeigt, wo die Instanziierung durchgeführt wurde. Es scheint mir, dass die zwei variablen Listen eindeutig analysiert werden sollten, weil der erste Typen und der andere nur ganzzahlige Werte hat.

Wenn das obige nicht funktioniert, denke ich, dass das Folgende auch nicht funktioniert.

%Vor%

Ich denke, dass das Foo-Template eine ziemlich nützliche Sache ist.

    
Sumant 12.01.2012, 03:44
quelle

2 Antworten

8

( Extra: ) Direkt auf Ihre erste Frage antwortend, können Sie template<class...T, T... t> void func() {} auch in eine Vorlage innerhalb einer Vorlage umwandeln. Dies funktioniert nicht in g ++ 4.6, aber in clang 3.0, daher brauchte ich eine Weile, um es zu finden.)

Legen Sie eine Vorlage in eine Vorlage:

%Vor%

Ist eine Vorlage innerhalb einer Vorlage akzeptabel? Eine Alternative besteht darin, Tupel mit func< tuple<char,int> , make_tuple('A',10) > zu verwenden. Ich denke, das ist machbar, aber Sie müssen möglicherweise Ihre eigene Tuple-Klasse rollen (es scheint, dass make_tuple kein constexpr ist.

Schließlich können Sie Ihre Foo-Vorlage möglicherweise wie folgt implementieren:

%Vor%

Dieser letzte Code ist auf ideone . Um dies zu demonstrieren, habe ich einen Konstruktor implementiert, um die Argumente an die Funktion, die Code ist, in die Vorlage weiterzuleiten.

    
Aaron McDaid 12.01.2012, 05:01
quelle
2

Weil niemand gedacht hat, dass es sich lohnt, diese Funktion zu haben. Das Design der Variadic-Vorlage sollte einfach und funktional sein. Andere möglicherweise erweiterte und nützliche Funktionen wurden nicht enthalten.

    
Johannes Schaub - litb 12.01.2012 08:41
quelle

Tags und Links