如果我有一个模板类,我稍后在文件中定义了一个成员函数,有没有办法避免重复长参数列表?例如
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) {
...
}
有没有办法让这个函数定义线保持这么久?有很多方法可以让我的代码难以阅读。
我尝试了类似
的typedeftemplate<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的模板声明;)。
谢谢!
答案 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”的声明,但是它们不能用在函数定义的嵌套名称说明符中,这是你试图简化的。