So rufen Sie explizite Vorlagenkonstruktoren mithilfe von Initialisierungslisten auf
Frage:
Kann eine explizite Vorlage sein Konstruktoren können mithilfe von Initialisierungslisten aufgerufen werden, wie im Folgenden dargestellt Beispiel?
struct T { template<class> T(); }; struct U { U() : t<void>() {} //does not work T t; };
Antwort:
Leider ist es nicht möglich, Vorlagenkonstruktoren mithilfe von Initialisierungslisten explizit aufzurufen.
Laut C Standard in 14.8.1/7: „[...] da Konvertierungs-Member-Funktionsvorlagen und Konstruktor-Member-Funktionsvorlagen ohne die Verwendung von a aufgerufen werden Wenn Sie einen Funktionsnamen verwenden, gibt es für diese Funktionsvorlagen keine Möglichkeit, eine explizite Vorlagenargumentliste bereitzustellen. In Ihrem Fall interpretiert der Compiler t
Um dieses Problem zu beheben, können Sie eine Problemumgehung anwenden:
Hier fungiert die Identität als Platzhalter für den Vorlagenparameter . Innerhalb von C 20 können Sie std::type_identity als Identitätstyp verwenden.struct T { template<class U> T(identity<U>); }; struct U { U() : t(identity<void>()) {} T t; };
Das obige ist der detaillierte Inhalt vonKönnen explizite Vorlagenkonstruktoren mithilfe von Initialisierungslisten aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!