使用声明来表示模板声明中的类型

Using declaration to denote a type within a template declaration

本文关键字:声明 类型 表示      更新时间:2023-10-16

>我有以下模板声明:

template <typename T1, typename T2>
class tree{
public:
tree(int,T2&);
~tree();
...
rNodePtrIter travPreord(int);
void travInord();
rNodePtrIter travInord(int);
void travPostord();
rNodePtrIter travPostord(int);
private:
NodePtrIter hierarchy;
};

我在模板声明的正上方声明了 rNodePtrIter 类型,如下所示:

using rNodePtrIter = list<unique_ptr<node<T1>>>::iterator&;

这不会编译,因为编译器抱怨类型 T1 未知:

错误:使用未声明的标识符"T1">

有没有办法进入上面的使用声明,以便我可以在我的模板声明中使用别名 rNodePtrIter,而不是更长的替代方案?

蒂亚

维诺德

只需在模板内移动类型别名声明:

template <typename T1, typename T2>
class tree{
public: using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;

请注意,它要求已经声明node模板。

您可以使用别名模板

template<typename T1>
using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;

然后将类中的rNodePtrIter替换为 rNodePtrIter<T1>