LINUX.ORG.RU

[C++] доступ к полям предков при наследование шаблонов (нубовский вопрос)


0

2

Туплю...

template <class T> class A {
protected:
	T* p; 
};

template <class T> class B : public A<T> {
public:
	T& operator [] ( int i ) { return p[i]; }
};
$ g++ test.cpp
test.cpp: In member function ‘T& B<T>::operator[](int)’:
test.cpp:11: error: ‘p’ was not declared in this scope

Лечится

	T& operator [] ( int i ) { return A<T>::p[i]; }

Для не-шаблонов все работает и так ес-но. Это вообще как понимать и как от этого избавится? Мне б категорически НЕ хотелось везде прописывать базовый_класс::...

★★★★★

Не как. Не должно быть параметров, независящих явно от шаблона (он все параметры, что не зависят, пытается подставить, а класс A<T> не известен при разборе шаблона)

namezys ★★★★ ()
Ответ на: комментарий от panter_dsd

ИМНО лучше вообще не наследовать параметризованные классы, потому как в частности через swig в питон они плохо протаскиваются. Я в итоге сумел увернуться, параметризовав лишь неск методов базового класса.

AIv ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.