Obwohl Konstruktoren die Möglichkeit haben, Template-Funktionen zu sein, stellt der C 03-Standard keine Syntax zur expliziten Angabe ihrer Template-Parameter bereit. Stattdessen bestimmt der Compiler diese Parameter automatisch anhand der bereitgestellten Argumente.
Betrachten Sie das folgende Beispiel:
struct A { template<typename T> A() {} };
Um diese Klasse zu instanziieren, können Sie den Vorlagenparameter nicht explizit angeben. Stattdessen müssen Sie sich darauf verlassen, dass der Compiler es aus den an den Konstruktor übergebenen Argumenten ableitet:
A<int> a; // Constructs an A object with template value int
Der C 03-Standard besagt ausdrücklich:
[Hinweis: weil die explizite Vorlagenargumentliste folgt dem Namen der Funktionsvorlage, und da Konvertierungs-Member-Funktionsvorlagen und Konstruktor-Member-Funktionsvorlagen ohne Verwendung eines Funktionsnamens aufgerufen werden, gibt es keine Möglichkeit, eine explizite Vorlagenargumentliste für diese Funktionsvorlagen bereitzustellen.] (§14.5.2/5)
Diese Einschränkung kann die Debugging-Bemühungen behindern, wenn der Compiler die richtigen Vorlagenparameter nicht ermitteln kann. Eine explizite Parameterangabe könnte Fehlermeldungen verbessern und möglicherweise das Problem beheben. Es wird jedoch vom C 03-Standard nicht unterstützt.
Das obige ist der detaillierte Inhalt vonKönnen Sie Vorlagenparameter in Konstruktoren in C 03 explizit angeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!