Boost C++ 17 Как можно сериализовать union

Рейтинг: 1Ответов: 0Опубликовано: 18.03.2023

Пытаясь сериализовать свою структура данных которая хранит в себе много разных структур столкнулся с проблемой. ‘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);

Ответы

Ответов пока нет.