C++ sibling template 类 as template 模板参数

C++ sibling template classes as template template parameters

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

我有 class 个模板:

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 作为参数,returns 一个 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...
}

为什么 work/what 会在这里发生?这是使用同级 class 模板执行此操作的正确方法吗?

以下应该足够了:

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