Heim > Backend-Entwicklung > C++ > Warum kann ich Vorlagenkonstruktoren in C-Initialisierungslisten nicht explizit aufrufen?

Warum kann ich Vorlagenkonstruktoren in C-Initialisierungslisten nicht explizit aufrufen?

Mary-Kate Olsen
Freigeben: 2024-11-29 15:12:11
Original
965 Leute haben es durchsucht

Why Can't I Explicitly Invoke Template Constructors in C   Initializer Lists?

Expliziter Aufruf von Vorlagenkonstruktoren in Initialisierungslisten

In C ist es nicht möglich, einen Vorlagenkonstruktor innerhalb einer Initialisierungsliste explizit aufzurufen. Betrachten Sie das folgende Beispiel:

struct T { 
    template<class> T();
};

struct U {
    U() : t<void>() {} //does not work
    T t;
};
Nach dem Login kopieren

Dieser Code kann nicht kompiliert werden, da der C-Standard explizit explizite Vorlagenargumentlisten für Konstruktor-Member-Funktionsvorlagen nicht zulässt. Dies liegt an der einzigartigen Syntax von Konstruktoren, die keinen Funktionsnamen haben.

Erklärung: Der C-Standard besagt in Abschnitt 14.8.1/7:

„Da die Liste der expliziten Vorlagenargumente dem Namen der Funktionsvorlage folgt und weil Konvertierungs-Member-Funktionsvorlagen und Konstruktor-Member-Funktionsvorlagen ohne Verwendung eines Funktionsnamens aufgerufen werden, gibt es keine Möglichkeit, einen bereitzustellen explizite Vorlagenargumentliste für diese Funktionsvorlagen Konstruktor, der die Vorlagenparameter als Argument akzeptiert:

In diesem Fall der Identitätstyp aus der Boost-Bibliothek oder der std::type_identity aus C 20 kann zur Darstellung des Vorlagenparametertyps verwendet werden. Dadurch kann der Vorlagenkonstruktor indirekt mithilfe eines Objekts dieses benutzerdefinierten Typs aufgerufen werden.

Das obige ist der detaillierte Inhalt vonWarum kann ich Vorlagenkonstruktoren in C-Initialisierungslisten nicht explizit aufrufen?. 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