Heim > Backend-Entwicklung > C++ > Können explizite Vorlagenkonstruktoren mithilfe von Initialisierungslisten aufgerufen werden?

Können explizite Vorlagenkonstruktoren mithilfe von Initialisierungslisten aufgerufen werden?

Mary-Kate Olsen
Freigeben: 2024-12-02 16:56:10
Original
800 Leute haben es durchsucht

Can Explicit Template Constructors Be Invoked Using Initializer Lists?

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;
};
Nach dem Login kopieren

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 als Basisklassentyp, was dazu führt, dass der Code fehlschlägt.

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;
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage