Компилятор не знает, что A<T>::f()
не использует параметр типа T
.Таким образом, вы должны указывать тип компилятора каждый раз, когда используете f
.
Но когда я разрабатываю шаблонный класс и замечаю, что некоторые члены / методы не зависят от параметров шаблона,Я часто перемещаю их в базовый класс без шаблонов.
class A_Base {
public:
static void f();
};
template <class T> class A : public A_Base {
// ...
};
Теперь A_Base::f()
, A<int>::f()
и A<double>::f()
- это действительно одно и то же.