2016-03-21 16 views
0

Bewirkt das folgende Standardargument für die Vorlage eine Vorlage mit dem Typ ?Unterstützt das Standardargument der Vorlagenklasse die Vorlage?

class EmptyClass{}; 

template <typename TYPE=EmptyClass> 
class Sample 
{ 
public: 
    static void test() 
    { 
     TYPE::Serialize(); 
    } 
}; 
+0

nur, wenn Sie eine Instantiierung deklarieren. – user463035818

+0

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. –

+0

Mit Vorlagen wird nichts instanziiert, bis Sie tatsächlich * die Vorlage * verwenden. Die statische Elementfunktion ist anders, da sie nicht auf Instanzen funktioniert. –

Antwort

-1

Nein, in diesem Code wird eine Instanz von EmptyClass erstellt. Serialize ist eine statische Funktion. Und der Konstruktor von EmptyClass wird niemals aufgerufen (in Code gezeigt).

+1

Die Frage war nicht über Konstruktoren und Objekte. Es geht um Template Instanziierung –

+0

Instanz einer Vorlage ist keine Instanz einer Klasse, die eine Instanz einer Klassenvorlage ist. Ich unterziehe also nicht, was Ihre Antwort mit der Frage zu tun hat. Und ich kann nicht nachvollziehen, warum diese "Antwort" ausgenommen wurde ... – Klaus

0

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.

Verwandte Themen