【发布时间】:2020-07-30 08:35:44
【问题描述】:
需要实现任意树,其中每个节点可以是字符串、整数或实数,并且有任意数量的子节点,也是这三种类型之一(子节点可以是不同的类型)。在为节点设计类时,我有两个想法:
template <typename T>
class tree_node
{
using value_type = typename std::enable_if
<
std::is_same<std::string, T>::value ||
std::is_same<int, T>::value ||
std::is_same<float, T>::value, T
>::type;
value_type data;
std::vector<??????> children;// What type must be there?
public:
...
和
struct node_data {};
struct str_node: public node_data
{
std::string data;
str_node(std::string &str): data(str) {};
};
struct int_node: public node_data
{
int data;
int_node(int n): data(n) {};
};
struct float_node: public node_data
{
float data;
float_node(float f): data(f) {};
};
class tree_node
{
std::shared_ptr<node_data> val;
std::vector<std::shared_ptr<node_data>> children;
public:
....
对于这个问题有没有优雅的解决方案(例如,一些设计模式)?
【问题讨论】:
-
...或使用
std::variant。
标签: c++ templates data-structures