У меня есть двоичное дерево, и я пытаюсь поместить каждую глубину узлов в свой собственный связанный список.C++ классы шаблонов sibling в качестве параметров шаблона шаблона
У меня есть шаблоны классов:
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». Единственный параметр шаблона, который вам нужен, - для 'T' TreeNode. – caps