我有一个tree_node
类和一个tree
类。持有泛型类型的实例 - C++
template<typename T>
class tree_node
{
public:
tree_node(const std::string& key_, const T& value_)
: key(key_), value(value_)
{
}
private:
T value;
std::string key;
};
template<typename T>
class tree
{
public:
tree() : root(new tree_node<T>("", ???)) { }
private:
tree_node<T>* root;
};
tree_node
创建时预计的T
一个实例。我如何在???
的地方通过它?我可以说T()
,但它只有在T
有一个无参数的构造函数时才起作用。 tree_node
我无法使用无参数的构造函数,因为如果T
没有无参数的构造函数,它将不会编译。
我正在寻找一种方法来设计tree_node
,它可以正确包含所有类型,包括指针类型。
编辑
尝试各种方法后,我发现boost::optional
在这种情况下有帮助。我可以将T value
分成boost::optional<T> value
。这将解决空构造问题。所以我可以有tree_node
的另一个构造函数超载,它只需要一个key
。这可以由根节点使用。这是正确的方法吗?
谢谢..
默认构造函数将root设置为NULL而不是? – UncleBens 2010-02-16 17:20:09
根本不?你有没有必要在需要时创建根? – falstro 2010-02-16 17:20:16
@UncleBens:根应该始终可用,以便我可以追加子元素。问题是,root并不真正拥有任何价值。 @roe:即使我懒洋洋地创作,我会传递什么样的价值? – 2010-02-16 17:23:46