带有泛型类方法定义的长模板参数列表

Zan*_*ith 5 c++ templates

如果我有一个模板类,我稍后在文件中为其定义了一个成员函数,有没有办法避免重复长参数列表?例如

template<class tempParam1, class tempParam2, class tempParam3>
class Foo {
  ...
  int Bar(int funcParam1, int funcParam2, int funcParam3);
}
template<class tempParam1, class tempParam2, class tempParam3>
int Foo<tempParam1, tempParam2, tempParam3>::Bar(int funcParam1, int funcParam2, int funcParam3) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让函数定义行不那么长?像这样定义一堆方法使我的代码难以阅读。

我尝试了一个 typedef 像

template<class tempParam1, class tempParam2, class tempParam3>
typedef Foo<tempParam1, tempParam2, tempParam3> FooClass;
int FooClass::Bar(int funcParam1, int funcParam2, int funcParam3) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是编译器(g++)抱怨(“错误:'typedef'的模板声明”)。

谢谢!

Pot*_*ter 3

如果在作用域内定义成员class {},则无需重复类模板参数。

也许您可以使用特征习语消除一些参数,或者以其他方式从一个参数计算多个参数。

代替

template< typename size_type, typename volume_type, typename width_type >
Run Code Online (Sandbox Code Playgroud)

你可以有

template< typename param_type >
  ...
    typedef typename measurement_traits< param_type >::size_type size_type;
Run Code Online (Sandbox Code Playgroud)

ETC。

C++11 确实引入了 using 声明,这些声明实际上是“模板化 typedef”,但它们不能在函数定义的嵌套名称说明符中使用,而这正是您试图简化的。