Heim >Backend-Entwicklung >C++ >Warum funktioniert die unqualifizierte Namenssuche nicht mit vorlagenparameterabhängigen Basisklassen in C?

Warum funktioniert die unqualifizierte Namenssuche nicht mit vorlagenparameterabhängigen Basisklassen in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-04 11:43:10715Durchsuche

Why Doesn't Unqualified Name Lookup Work with Template Parameter-Dependent Base Classes in C  ?

Vorlagenparameterabhängige Basisklasse und unqualifizierte Namenssuche

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::Vec_t), zu einem Compilerfehler, der darauf hinweist, dass Vec_t nicht erkannt wird.

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!

Stellungnahme:
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