使用类型定义-基于模板参数的类-类的超出范围

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)

(在我的情况TMaxSimplePathVertex<VertexType<VertexIDType>>,我有3种类型定义,所以它真的很麻烦)。

我想我可以将所有typedef复制每个函数定义中,但这似乎不是一个很好的解决方案。

而且,当然可以#define X T1,但是通常我会听到人们建议不要使用#define这些东西。

那么最好的解决方案是什么?

Joh*_*itb 5

当您处理返回类型中的模板和成员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>::它们放在它们的前面。

  • 从C ++ 11开始,据我所知@Nawaz。 (2认同)