如何为链表定义节点模板?我还想将指针类型保留为模板参数,以便我可以将其更改为unique_ptr或shared_ptr取决于可用的内容。
template<typename T, typename NodePtr>
struct node{
T data;
NodePtr parent = nullptr;
};
问题是如何启动此类以使Nodeptr为shared_ptr < Node <T ,what?> >
类型?
答案 0 :(得分:3)
&#34;最简单&#34;我能想到的解决方案是一个可变参数模板模板参数:
template<class T,template<class ...> class PTR_T>
struct Node {
T data;
PTR_T<Node> parent{nullptr};
};
这适用于unique_ptr
和shared_ptr
,如下所示:
Node<int,std::shared_ptr> roots;
Node<int,std::unique_ptr> rootu;
正如您自己所建议的那样,如果您想使用原始指针,则必须引入类型别名:
template<class T> using raw_ptr = T*;
答案 1 :(得分:0)
您只需传递参数T
:
template <typename T>
struct node
{
T data;
node<T> * parent;
}