簡體   English   中英

使用聲明來表示模板聲明中的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM