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

时间:2013-07-18 22:39:01

标签: 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) {
  ...
}

有没有办法让这个函数定义线保持这么久?有很多方法可以让我的代码难以阅读。

我尝试了类似

的typedef
template<class tempParam1, class tempParam2, class tempParam3>
typedef Foo<tempParam1, tempParam2, tempParam3> FooClass;
int FooClass::Bar(int funcParam1, int funcParam2, int funcParam3) {
  ...
}

但编译器(g ++)抱怨(&#34;错误:'typedef'&#34的模板声明;)。

谢谢!

1 个答案:

答案 0 :(得分:3)

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

也许你可以使用traits idiom消除一些参数,或以其他方式计算几个参数。

而不是

template< typename size_type, typename volume_type, typename width_type >

你可以

template< typename param_type >
  ...
    typedef typename measurement_traits< param_type >::size_type size_type;

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