2010-09-01 12 views
5

Potrzebuję wyjaśnienia na temat, dlaczego potrzebujemy operatora zakresu rozdzielczości lub wskaźnika this, aby uzyskać dostęp do dziedziczonych użytkowników z szablonu klasy bazowej. Jak rozumiem, jest to dodanie jasności, ale w takim razie, w jaki sposób this dodaje jeszcze jedną klarowność, niż tylko wskazuje, że jest członkiem klasy.Dostęp do dziedziczonych elementów danych szablonu szablonów

Aby moje pytanie było bardziej przejrzyste, dodałem kod.

#include <iostream> 
using namespace std; 

template <class T, class A> 
class mypair { 
     public: 
     T a, b; 
    public: 
    mypair (T first, T second) 
     {a=first; b=second;} 

     virtual void printA() 
     { 
     cout<<"A"<<a<<endl; 
     cout<<"B"<<b<<endl; 
     } 
}; 







template <class T, class A> 
class next: mypair<T,A> 
{ 
public: 

     next (T first, T second) : mypair<T,A>(first, second) 
     { 
     } 

     void printA() 
     { 
     cout<<"A:"<<mypair<T,A>::a<<endl; // this->a; also works 
     cout<<"B:"<<mypair<T,A>::b<<endl; // this-b; also works 
     } 

}; 


int main() { 
    next<double,float> newobject(100.25, 75.77); 
    newobject.printA(); 
    return 0; 
} 

wyjściowa:

A:100.25 
B:75.77 

jeśli usunąć ten zakres (lub operator) to z błędu zakres pochodzi. Ale dlaczego potrzebujemy zakresu dla publicznie dziedziczonych członków.

Kilka myśli na ten temat byłoby świetnie.

Odpowiedz

4

Patrz Name lookup - Using the GNU Compiler Collection (GCC)

Dodając wyraźny prefiks mypair<T, A> lub this->, robisz printA szablon argumentem zależne. Następnie definicje zostaną rozwiązane podczas etapu tworzenia szablonu.

+0

Interesujący przeczytaj Czy jest to przypadek specjalny z szablonami? – Sii

+0

Tylko w funkcjach w klasie szablonu. –

Powiązane problemy