[英]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未知,因此無法編譯:
錯誤:使用未聲明的標識符“ T1”
有沒有一種獲取上述using聲明的方法,這樣我可以在模板聲明中使用別名rNodePtrIter而不是更長的替代方法?
TIA
維諾德
您可以使用別名模板 :
template<typename T1>
using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
然后將rNodePtrIter
內的rNodePtrIter<T1>
替換為rNodePtrIter<T1>
。
只需在模板內部移動類型別名聲明即可:
template <typename T1, typename T2>
class tree{
public: using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
請注意,它要求已經聲明node
模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.