Я понимаю, что имена членов шаблона базового класса скрыты в области видимости производного класса и поэтому должны быть доступны с использованием this->foo
или Base<T>::foo
.Однако я напоминаю, что C ++ также позволяет вам использовать ключевое слово using
, которое может пригодиться в функции производного класса, которая часто обращается к переменной базового класса.Поэтому, чтобы не загромождать функцию с помощью this->
везде, я бы хотел использовать ключевое слово using
.
Я знаю, что делал это раньше, но по любой причине могуне заставить его работать сейчас.Я, вероятно, просто делаю что-то глупое, но следующий код не скомпилируется:
template <class T>
struct Base
{
int x;
};
template <class T>
struct Derived : public Base<T>
{
void dosomething()
{
using Base<T>::x; // gives compiler error
x = 0;
}
};
int main()
{
Derived<int> d;
}
Ошибка (с GCC 4.3): error: ‘Base<T>’ is not a namespace
Почему неэто работа?