私はバイナリツリーを持っており、それぞれの深さを独自のリンクリストに入れようとしています。テンプレートテンプレートパラメータとして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