Nr. Vorlage wird instanziiert, wenn sie verwendet wird, und werden auf einer Basis pro Funktion instanziiert.
Standardparameterwerte sind nur die Typen, die verwendet werden, wenn der Parameter nicht angegeben ist. Aber bedeutet nicht selbst Verwendung.
Wenn Sie anrufen Sample<>::test()
dann Sample<Emptyclass>::test()
instanziiert und der EmptyClass::serialize()
Aufruf versucht, was zu einem Fehler bei der Kompilierung (Da Emptyclass
deklariert wird als nicht solche Funktion)
versuchen, mehr Funktion zu bilden, die verschiedene Kompilierung -Zeitfehler, die sich auf verschiedene Parameter beziehen, und Sie werden sehen, wie kein Fehler erzeugt wird, bis die Funktion nicht verwendet wird.
nur, wenn Sie eine Instantiierung deklarieren. – user463035818
Das hat mir keinen Kompilierungsfehler gegeben. Das bedeutet, dass die Vorlagen nicht instanziiert werden. Aber ich konnte keine Zeile in C++ 11-Standards finden, die von Instanziierung spricht. –
Mit Vorlagen wird nichts instanziiert, bis Sie tatsächlich * die Vorlage * verwenden. Die statische Elementfunktion ist anders, da sie nicht auf Instanzen funktioniert. –