Зерновая сериализация унаследованных классов не работаетC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Зерновая сериализация унаследованных классов не работает

Сообщение Anonymous »

Я пишу 2D-игровой движок на SDL3 и C++ и пытаюсь сериализовать деревья узлов с помощью зерновых (https://uscilab.github.io/cereal/).
Каждый узел может иметь список компонентов, и у меня возникают проблемы с сериализацией сценариев, которые представляют собой класс, наследующий класс компонента:

Код: Выделить всё

class Node; // forward declaration

// base component class, basically empty
struct Component
{
virtual ~Component() = default;

template 
void save(Archive &ar) const {}

template 
void load(Archive &ar) {}
};

// base script class with virtual functions
class Script : public Component
{
public:
virtual void start() {};

template 
void save(Archive &ar) const
{
ar(cereal::base_class(this));
};

template 
void load(Archive &ar)
{
ar(cereal::base_class(this));
};
};

CEREAL_REGISTER_POLYMORPHIC_RELATION(Component, Script) // i suppose i have to do this
тогда у пользователя может быть заголовочный файл, в котором он определяет свой сценарий, наследуя класс сценария:

Код: Выделить всё

class ExampleScript : public Script
{
Node *node;
int exampleValue = 42;

public:
template 
void save(Archive &ar) const
{
ar(cereal::base_class(this), exampleValue);
}

template 
void load(Archive &ar)
{
ar(cereal::base_class(this), exampleValue);
}

void start()
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79894509/cereal-serialization-of-inherited-classes-doesnt-work[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»