C ++兄弟模板类作为模板模板参数

时间:2016-09-14 22:31:41

标签: c++ templates inheritance function-templates

我有一个二叉树,我试图将每个节点深度放在它自己的链表中。

我有类模板:

template <typename T> 
class Node 
{
    public:
        T data;
};

template <typename T>
class ListNode : public Node<T>
{
    public:
        ListNode * next;
};

template <typename T>
class TreeNode : public Node<T>
{
    public:
        TreeNode * left;
        TreeNode * right;
};

为了完成这项任务,我计划使用一个以TreeNode<T> * root为参数的函数模板,并返回vector<ListNode<T> *>

定义功能模板的正确方法是什么?

不知道如何接近它,我最初期望这样的事情是实现这个目标的一种方式:

template <template <typename> class Node, typename T>
std::vector<ListNode<T> *> listify(TreeNode<T> * root)
{
    // Do stuff...
}

但这不起作用。

编译器似乎没问题:

template <template <typename> class TreeNode, typename T>
std::vector<ListNode<T> *> listify(TreeNode<T> * root)
{
    // Do stuff...
}

为什么这样做/这里到底发生了什么?这是使用兄弟类模板执行此操作的正确方法吗?

1 个答案:

答案 0 :(得分:3)

以下应该足够了:

template <typename T>
std::vector<ListNode<T>*> listify(TreeNode<T>* root)