Heim > Backend-Entwicklung > C++ > Wie kann ich Typaliase ordnungsgemäß von einer Basisklassenvorlage an eine abgeleitete Klassenvorlage in C erben?

Wie kann ich Typaliase ordnungsgemäß von einer Basisklassenvorlage an eine abgeleitete Klassenvorlage in C erben?

Patricia Arquette
Freigeben: 2024-12-02 02:34:11
Original
582 Leute haben es durchsucht

How Can I Properly Inherit Type Aliases from a Base Class Template to a Derived Class Template in C  ?

Typaliase von der Basis an abgeleitete Klassen für Vorlagen weitergeben

In C ist es üblich, Typaliase zu definieren, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern . Bei der Arbeit mit Klassenvorlagen und Vererbung erfordert die Weitergabe von Typedefs von einer Basisklasse an eine abgeleitete Klasse jedoch einen bestimmten Ansatz.

Angenommen, wir haben eine Basisklassenvorlage A, die nur Typedefs enthält:

template<typename T>
class A {
public:
    typedef std::vector<T> Vec_t;
};
Nach dem Login kopieren

Jetzt erstellen wir eine abgeleitete Klassenvorlage B, die von A erbt:

template<typename T>
class B : public A<T> {
private:
    Vec_t v;  // fails - Vec_t is not recognized
};
Nach dem Login kopieren

In diesem Code führt der Versuch, Vec_t in der abgeleiteten Klasse B zu verwenden, zu einem Fehler. Dies liegt daran, dass die Suche nach qualifizierten Namen für Vec_t während der Definition der abgeleiteten Klassenvorlage oder während einer Instanziierung der Vorlage nicht durchgeführt wird.

Um dieses Problem zu beheben, muss der vollständig qualifizierte Name der Typdefinition in verwendet werden abgeleitete Klasse:

typename A<T>::Vec_t v;
Nach dem Login kopieren

Diese Notation gibt den Umfang der Typedef vollständig an und ermöglicht die Weitergabe an die abgeleitete Klasse Klasse.

Im Wesentlichen verlangt der C-Standard, dass Basisklassenbereiche, die von Vorlagenparametern abhängen, bei der unqualifizierten Namenssuche nicht untersucht werden. Diese Einschränkung stellt sicher, dass die Auflösung von Typedefs über verschiedene Instanziierungen von Klassenvorlagen hinweg konsistent und vorhersehbar ist.

Das obige ist der detaillierte Inhalt vonWie kann ich Typaliase ordnungsgemäß von einer Basisklassenvorlage an eine abgeleitete Klassenvorlage in C erben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage