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; };
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!