我有一个tree_node
班级和一个tree
班级。
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
. 这可以由根节点使用。这是正确的方法吗?
谢谢..