【发布时间】:2015-11-08 04:54:12
【问题描述】:
这就是我想要做的(在我的头文件中):
#include <forward_list>
class Data {
public:
Data(int type, union data value);
int which_type();
void set_int(const int& i);
void set_list(std::forward_list<Data*>& l);
int get_int();
std::forward_list<Data*>* get_list();
private:
union data actual_data;
int type;
};
union data {
int i;
std::forward_list<Data*> l;
};
如果一切正常,这将创建一个可以包含整数或列表的类,并且它会尽可能类型安全,因为我会在每次调用其中一个 get 函数之前调用 which_type 函数, 如果对象的类型不正确,get 函数会抛出异常。
但是,这是不可能的,因为Data 需要union data,而union data 需要forward_list<Data*>。我相信 boost 有我正在寻找的东西,但是有没有办法在没有 boost 的情况下做到这一点?我宁愿使用标准库来了解更多关于 c++ 标准库的信息。
【问题讨论】:
-
为什么不转发声明
Data并将union_data移到Data的定义之前?
标签: c++ class c++11 standard-library