Как сериализовать entt :: sparse_set?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как сериализовать entt :: sparse_set?

Сообщение Anonymous »

Я некоторое время пытался сериализовать реестр ENTT. Тем не менее, я не могу сериализовать любые компоненты с помощью entt :: sparse_set. Я стараюсь избегать их использования, но некоторые варианты использования требуют этого, по моему, возможно, наивно. Я написал функцию сериализации, чтобы преобразовать их в векторы на выходе, но не могу заставить ее работать/компилировать, когда такие компоненты включены в сериализацию. Все мои подходы работают для других компонентов без sparse_set. Ранее я использовал вектор EntityData, но он также, кажется, не может скопировать Sparse_sets. Есть ли способ, которым я могу определить функцию, чтобы SPARSE_SETS можно было сериализовать и десериализовано, которая проживает в компоненте?struct StarSystem {
//bary center always 0,0
sf::Vector2f location;
vector bodies; //or group?, OR a vector
entt::sparse_set entities;
StarSystem() {
}
StarSystem(sf::Vector2f pos) {
location = pos;
}

void addBody(entt::entity entity) {
bodies.push_back(entity);
}

void insertFleet(entt::entity entity) {
//check explored flags, flag system. Generate system if empty

entities.push(entity);
}

template
void serialize(Archive& archive) {
archive(CEREAL_NVP(location),
CEREAL_NVP(bodies),
CEREAL_NVP(entities)
);
}

static std::string typeName() { return "StarSystem"; }
};
< /code>
Функция сериализации: < /p>
void serialize_registry(entt::registry const& registry) {
std::string savePath = "save.json";
std::ofstream os(savePath);
cereal::JSONOutputArchive archive(os);

auto regView = registry.view();

archive.setNextName("entities");
archive.startNode();
for(auto entity : regView){
archive.startNode();
archive(cereal::make_nvp("entity", entity));
[&archive, &registry, entity] (std::variant) {
((registry.all_of(entity)
? (void)archive(cereal::make_nvp(Types::typeName(), registry.get(entity)))
: void()), ...);
}(entityComponents{});
archive.finishNode();
}
archive.finishNode();
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... sparse-set
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать функцию Set Set State Set Set Satwerive AMD (ADL) (для программного переворачивания)
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать Set> в Set?
    Anonymous » » в форуме JAVA
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Функция ENTT реестра.emplace<>() вызывает ошибку сегментации компонента с логическим значением [закрыто]
    Гость » » в форуме C++
    0 Ответы
    64 Просмотры
    Последнее сообщение Гость
  • Как я могу получить доступ ко всем объектам в entt::registry?
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Можно ли добавить вариант STD :: в качестве компонента в сущность в ENTT?
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

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