如何使用指针作为模板类型为链接列表节点定义模板类

时间:2015-03-31 22:00:59

标签: c++ c++11

如何为链表定义节点模板?我还想将指针类型保留为模板参数,以便我可以将其更改为unique_ptr或shared_ptr取决于可用的内容。

template<typename T, typename NodePtr>
struct node{
    T data;
    NodePtr parent = nullptr;
};

问题是如何启动此类以使Nodeptr为shared_ptr < Node <T ,what?> >类型?

2 个答案:

答案 0 :(得分:3)

&#34;最简单&#34;我能想到的解决方案是一个可变参数模板模板参数:

template<class T,template<class ...> class PTR_T>
struct Node {
    T data;
    PTR_T<Node> parent{nullptr};
};

这适用于unique_ptrshared_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;
}