Das Template-Argument
template <typename, typename...> class Holder
ist ein Template-Template-Argument. Dies bedeutet, dass das Template-Argument eine Klassenvorlage sein sollte, die über einen einzelnen Typ gefolgt von einer Liste von Template-Typ-Argumenten parametrisiert werden kann. wenn Sie eine Vorlage wie
template <typename, typename... Args> class ImAVariadicTemplate {
// ...
};
hatte, konnte Sie die erste Vorlage Argument instanziiert zum Beispiel durch in ImAVariadicTemplate
vorbei.
Das nächste Bit, retType(T...)
, bedeutet „den Typ einer Funktion, deren Rückgabetyp ist retType
und deren Argumenttypen werden von der Liste der Typen im Parameter Pack T
. Zum Beispiel gegeben angegeben, wenn retType
int
und T
ist die Liste double, float, short
, dann erweitert dies auf den Typ int(double, float, short)
, die Art einer Funktion in einem double
, einem float
, und einem short
nehmen und eine int
zurückgeben. (Die Syntax hier kann ziemlich verwirrend sein, da es aussieht wie du bist Aufruf einer Funktion namens retType
, wenn Sie wirklich über eine Art von Funktion sprechen.)
Setzt man diese zusammen, um die Syntax
Holder<retType(T...)>
bedeutet „instanziiert die Holder
Vorlage als Typ mit dem Typ einer Funktion, die in einer Reihe von Argumenten, deren Typ nimmt durch die Liste der Typen in T
gegeben ist und gibt eine retType
zurück. "Rollen von der Zunge. :-)
'retType (T ...)' ist ein Funktionstyp, der 'retType' zurückgibt und eine Packung' T' nimmt. Zum Beispiel: 'int (bool, char, int)' oder 'void()' – 0x499602D2