gpt4 book ai didi

c++ - 使用 typedef – 基于类的模板参数 – 在类范围之外

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:11 26 4
gpt4 key购买 nike

如何使用 typedef ,它基于我的类的模板参数,在类函数的声明和定义中?

假设我的类(class)是:

template<class T>
class A
{
typedef T::T1 X;
typedef T::T2 Y;

X& f1(Y& y);
Y& f2(Y& y);

// More declarations
};

所以在定义中,我不能只写:

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

(在我的例子中 TMaxSimplePathVertex<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& {...}

出现在成员函数名之后的东西在A<T>中查找模板,这意味着您不需要将 A<T>::在他们面前。

关于c++ - 使用 typedef – 基于类的模板参数 – 在类范围之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42326173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com