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)
我有一个二叉树,我试图将每个深度的节点放在它自己的链表中。
我有 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)