Это то, что я пытаюсь сделать (в моем файле заголовка):Класс, который содержит список себе
#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;
};
Если бы все было работать должным образом, это может создать класс, который может содержать целое число или список, и он будет как можно более безопасным по типу, потому что я бы назвал функцию who_type перед каждым вызовом одной из функций get, а функции get будут генерировать исключение, если объект не является правильным типом.
Однако это невозможно, потому что Data
нуждается в union data
, а union data
нуждается в forward_list<Data*>
. Я считаю, что у boost есть то, что я ищу, но есть ли способ сделать это без повышения? Я бы просто использовал стандартную библиотеку, чтобы больше узнать о стандартной библиотеке C++.
Почему бы не переслать декларацию 'Data' и переместить' union_data' перед определением 'Data'? – Caninonos