我有一個二叉樹,我試圖把每個深度的節點放在它自己的鏈表中。C++同級模板類作爲模板模板參數
我有類模板:
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...
}
爲什麼這個工作/究竟發生在這裏?這是用兄弟類模板做這件事的正確方法嗎?
'TreeNode'並不需要是一個模板參數存在。正如@ jarod42所暗示的,你可以參考'TreeNode'類。你需要的唯一模板參數是TreeNode的'T'。 – caps