Доступ к открытым унаследованным элементам данных Template - PullRequest
6 голосов
/ 01 сентября 2010

Мне нужно прояснить вопрос, зачем нам нужен оператор разрешения области действия или указатель this для доступа к публично унаследованным элементам из базового класса шаблона.Как я понимаю, это для придания ясности, но тогда как this добавляет еще большей ясности, чем просто указание на то, что он является членом класса.

Чтобы прояснить свой вопрос, я добавил некоторый код.

#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;
}

Вывод:

A:100.25
B:75.77

Если я удаляю область (или этот оператор), то появляется ошибка вне области видимости.Но зачем нам нужна область для публично унаследованных членов.

Некоторые мысли по этому поводу были бы замечательными.

1 Ответ

5 голосов
/ 01 сентября 2010

См. Поиск имени - Использование коллекции компиляторов GNU (GCC)

Добавляя явный префикс mypair<T, A> или this->, вы устанавливаете printA аргумент шаблона зависимым.Затем определения будут решены на этапе создания шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...