Boost C++ 17 Как можно сериализовать union
Пытаясь сериализовать свою структура данных которая хранит в себе много разных структур столкнулся с проблемой. ‘union types’ has no member named ‘serialize’
types.h
union types {
field *string;
int64_t integer;
int64_t boolean;
double real;
};
operations.h
#include "form.h"
#include "field_types.h"
#include "types.h"
#include <cstdint>
struct operations {
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version) {
ar & type;
ar & value;
}
public:
uint8_t field;
field_types type;
types value;
operations(uint8_t field, enum field_types type, union types value);
operations();
};
При этом, если я просто объявляю метод сериализации в union у меня появляется другая ошибка
types.h
union types {
field *string;
int64_t integer;
int64_t boolean;
double real;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version) {
ar & string;
ar & integer;
ar & boolean;
ar & real;
}
};
error: request for member ‘serialize’ in ‘t’, which is of non-class type ‘char’ t.serialize(ar, file_version);
Источник: Stack Overflow на русском