Dro*_*man 2 c++ parameters templates typedef
typedef在类函数的声明和定义中,如何使用基于类的模板参数的?
假设我的课是:
template<class T>
class A
{
typedef T::T1 X;
typedef T::T2 Y;
X& f1(Y& y);
Y& f2(Y& y);
// More declarations
};
Run Code Online (Sandbox Code Playgroud)
因此,在定义中,我不能只写:
typedef typename T::T1 X;
typedef typename T::T2 Y;
template<class T>
X& A<T>::f1(Y& y) {...}
template<class T>
Y& A<T>::f2(Y& y) {...}
Run Code Online (Sandbox Code Playgroud)
(在我的情况T是MaxSimplePathVertex<VertexType<VertexIDType>>,我有3种类型定义,所以它真的很麻烦)。
我想我可以将所有typedef复制到每个函数定义中,但这似乎不是一个很好的解决方案。
而且,当然可以#define X T1,但是通常我会听到人们建议不要使用#define这些东西。
那么最好的解决方案是什么?
当您处理返回类型中的模板和成员typedef时,尾随的返回类型是真正的节省者。你可以简单地说
template<class T>
auto A<T>::f1(Y& y) -> X& {...}
template<class T>
auto A<T>::f2(Y& y) -> X& {...}
Run Code Online (Sandbox Code Playgroud)
在A<T>模板中查找成员函数名称之后出现的内容,这意味着您无需将A<T>::它们放在它们的前面。