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

时间:2018-01-08 11:12:59

标签: c++ templates using

我有以下模板声明:

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'

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

TIA

维诺德

2 个答案:

答案 0 :(得分:2)

您可以使用alias template

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

然后使用rNodePtrIter替换班级中的rNodePtrIter<T1>

答案 1 :(得分:2)

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

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

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