Ich bekomme nicht den Grund, für den ein Parameter-Pack am Ende der Parameterliste sein muss, wenn letzterer an eine Klasse gebunden ist, während die Einschränkung gelockert wird, wenn die Parameterliste Teil einer Member-Methodendeklaration ist.Parametersatz muss am Ende der Parameterliste stehen ... Wann und warum?
Mit anderen Worten, dieser kompiliert:
class C {
template<typename T, typename... Args, typename S>
void fn() { }
};
Hier finden Sie eines nicht:
template<typename T, typename... Args, typename S>
class C { };
Warum der erste Fall ist richtig betrachtet und die zweite ist nicht wahr?
Ich meine, wenn es legale Syntax ist, sollte es nicht in beiden Fällen sein?
Um klar zu sein, das eigentliche Problem ist, dass ich eine Klasse ähnelt dem folgenden wurde die Definition:
template<typename T, typename... Args, typename Allocator>
class C { };
die allocator Typ als der letzte Typ Having würde geschätzt, aber ich kann irgendwie drum herum arbeiten (Wie auch immer, wenn Sie einen Vorschlag haben, ist es geschätzt, vielleicht sind Ihre viel eleganter als meins !!).
Das heißt, habe ich den Fehler:
parameter pack 'Args' must be at the end of the template parameter list
Also, ich war nur neugierig, um zu verstehen, warum es in einigen Fällen akzeptiert wird, aber es ist nicht in einigen anderen.
Here ist eine ähnliche Frage, aber es erklärt einfach, wie man das Problem löst, und das war mir ziemlich klar.
Sie verwenden einen Standard für den letzten Typparameter - soweit ich mich erinnere, ändert sich die Sache sehr. (Aber ich vergesse die Details). Vielleicht sollten Sie die Standardeinstellungen in Ihren beiden Eröffnungsbeispielen angeben? –
Können Sie ein Beispiel geben, wie Sie diese Vorlagen aufrufen möchten? Ich bin nicht sicher, dass es sehr relevant ist, aber es könnte helfen –
Sorry, der Standardparameter war ein Fehler, nicht mehr da. Ich plane, diese Vorlage wie jede andere zu verwenden: 'C>'. Das Problem liegt in der Tatsache, dass diese Syntax für eine Member-Methode richtig ist, aber es ist nicht für eine Klassendefinition und ich verstehe nicht, warum es nicht ist !! –
skypjack