使用声明来表示模板声明中的类型
Using declaration to denote a type within a template declaration
我有以下模板声明:
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 未知:
error: use of undeclared identifier 'T1'
有没有办法进入上面的 using 声明,这样我就可以在我的模板声明中使用别名 rNodePtrIter,而不是更长的替代方案?
TIA
维诺德
您可以使用 alias template:
template<typename T1>
using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
然后将class中的rNodePtrIter
替换为rNodePtrIter<T1>
。
只需在模板中移动类型别名声明:
template <typename T1, typename T2>
class tree{
public: using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
请注意,它需要 node
模板已经声明。
我有以下模板声明:
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 未知:
error: use of undeclared identifier 'T1'
有没有办法进入上面的 using 声明,这样我就可以在我的模板声明中使用别名 rNodePtrIter,而不是更长的替代方案?
TIA
维诺德
您可以使用 alias template:
template<typename T1>
using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
然后将class中的rNodePtrIter
替换为rNodePtrIter<T1>
。
只需在模板中移动类型别名声明:
template <typename T1, typename T2>
class tree{
public: using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
请注意,它需要 node
模板已经声明。