我有一个二叉树,我试图将每个节点深度放在它自己的链表中。
我有类模板:
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...
}
为什么这样做/这里到底发生了什么?这是使用兄弟类模板执行此操作的正确方法吗?
答案 0 :(得分:3)
以下应该足够了:
template <typename T>
std::vector<ListNode<T>*> listify(TreeNode<T>* root)