Heim >Backend-Entwicklung >C++ >Wie funktioniert die Typweitergabe „typedef' von Basisklassen zu abgeleiteten Klassen in C-Vorlagen?
In C ist es möglich, Typedefs innerhalb einer Basisklasse zu definieren, um praktische Aliase für bestimmte bereitzustellen Datentypen. Wenn Sie jedoch eine vorlagenbasierte Basisklasse verwenden, ist es wichtig, den Weitergabemechanismus dieser Typedefs an abgeleitete Klassen zu verstehen.
Betrachten Sie das folgende Beispiel:
template<typename T> class A { public: typedef std::vector<T> Vec_t; }; template<typename T> class B : public A<T> { private: Vec_t v; // fails - Vec_t is not recognized };
Hier die Basis Klasse A definiert eine Typdefinition namens Vec_t für einen Vektor vom Typ T. Wenn in der abgeleiteten Klasse B versucht wird, Vec_t zu verwenden, ohne es vollständig zu qualifizieren (z. B. Typname A
Dieses Verhalten wird durch den C-Standard (14.6.2/3) erklärt. Gemäß dem Standard „wird bei der Definition einer Klassenvorlage oder eines Mitglieds einer Klassenvorlage, wenn eine Basisklasse der Klassenvorlage von einem Vorlagenparameter abhängt, der Basisklassenbereich bei der unqualifizierten Namenssuche nicht untersucht.“
Daher wird in der abgeleiteten Klasse B der unqualifizierte Bezeichner Vec_t nicht erkannt, da der Compiler den Basisklassenbereich nicht auf die Suche nach unqualifizierten Namen untersucht. Um ordnungsgemäß auf die Typedef zugreifen zu können, ist es erforderlich, den Namen mithilfe der Syntax typename A
Das obige ist der detaillierte Inhalt vonWie funktioniert die Typweitergabe „typedef' von Basisklassen zu abgeleiteten Klassen in C-Vorlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!