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