Heim >Backend-Entwicklung >C++ >Warum funktioniert die unqualifizierte Namenssuche nicht mit vorlagenparameterabhängigen Basisklassen in C?
In C wird beim Definieren einer Klassenvorlage der Basisklassenbereich während der unqualifizierten Namenssuche nicht untersucht, wenn die Die Basisklasse hängt von einem Vorlagenparameter ab. Dieses Verhalten ist in 14.6.2/3 des C-Standards beschrieben.
Beachten Sie den folgenden Code:
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 };
In diesem Beispiel erbt die B-Klasse von der A-Klassenvorlage, die enthält einen Typalias Vec_t. Allerdings führt innerhalb der B-Klasse der Versuch, Vec_t zu verwenden, ohne es vollständig zu qualifizieren (d. h. A
Um dieses Problem zu beheben, Der Name des Typalias muss innerhalb der B-Klasse vollständig qualifiziert sein:
template<typename T> class B : public A<T> { private: typename A<T>::Vec_t v; // correct - fully qualified name };
Dies liegt daran, dass es sich bei dem Namen um einen nicht qualifizierten Namen handelt Bei der Suche in der Definition einer Klassenvorlage oder ihres Mitglieds wird der Basisklassenbereich nicht untersucht, wenn die Basisklasse von einem Vorlagenparameter abhängt. Daher ist es notwendig, den Namen des Typalias explizit zu qualifizieren, um Compilerfehler zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum funktioniert die unqualifizierte Namenssuche nicht mit vorlagenparameterabhängigen Basisklassen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!