[С++] Шаблоны классов и наследование
Можно ли добиться результата более изящно?Можно так:
template <typename T>
class Base {
protected:
int a;
void b;
};
template <typename T>
class Derived : public Base<T> {
void f {
this->a = 0;
this->b;
}
};
Спасибо.
Оставить комментарий
nomad
Есть такая проблема (код не мой, датируется 97 годом). Места следующего характеране компилируются с ошибками вида
In member function ‘void Derived<T>::f’:
11: error: ‘a’ was not declared in this scope
12: error: there are no arguments to ‘b’ that depend on a template parameter, so a declaration of ‘b’ must be available
12: error: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
(компилятор gcc (GCC) 4.1.2)
Чтобы заработало, приходится делать так:
Недостаток этого подхода в том, что в реальном коде квалификатор, стоящий на месте Base<T>:: из примера намного
более громоздкий, в некоторые методы его приходится вставлять много раз, что делает код совершенно нечитаемым.
Можно ли добиться результата более изящно?