如果我有:

template <class T>
class A
{
 static void f()
 {
  // not using template parameter T
 }
};

在这种情况下,A<int>::f()A<double>::f()相同,但是我不想通过template参数调用A::f()。是否有允许调用f()但不需要template参数的语法?

最佳答案

编译器不知道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()确实是同一回事。

07-25 22:28
查看更多