#include <stdio.h>
template <class T>
class BTreeNode {
public:
BTreeNode(T d){data = d;};
private:
T data;
};
template <class T, template<class> class Node>
class BTree {
private:
Node<???> m_treeNodes; // I hope this type can be specified by the client,
// but I don't know how to write here
T m_data;
};
int main() {
BTree<int, BTreeNode<int> > tree;// I don't know how to write here
return 0;
}
那么如果我想要一个模板类有一个成员变量,该怎么办? 另一个模板类。或者如果我的设计有问题?谢谢
答案 0 :(得分:1)
如果您希望客户端直接指定实例化,您可以使用类型模板参数而不是模板模板参数,例如
template <class T, class Node>
class BTree {
private:
Node m_treeNodes; // use the type specified by client directly
T m_data;
};
然后
int main() {
BTree<int, BTreeNode<int> > tree; // specify the instantiation at client
return 0;
}
或者您可以添加另一个类型参数,并确定类模板中的实例化,这在某些情况下可能更灵活。
template <class T, template <typename> class Node, class X>
class BTree {
private:
Node<X> m_treeNodes; // determine the instantiation here
T m_data;
};
然后
int main() {
BTree<int, BTreeNode, int> tree; // specify the types at client
return 0;
}
答案 1 :(得分:1)
除非我误解了你的意图,否则我认为你可以使用为整个T
指定的类型BTree
:
template<class T>
class BTreeNode
{
public:
BTreeNode() {}
BTreeNode(T d){data = d;};
private:
T data;
};
template<class T>
class BTree
{
public:
BTree() {}
private:
BTreeNode<T> m_treeNodes; // just use T ?
};
int main()
{
BTree<int> tree;
}