gpt4 book ai didi

c++ - ECS序列化

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:24 29 4
gpt4 key购买 nike

我目前正在为游戏引擎开发 ECS 系统,偶然发现了序列化问题。 我在我的 ECS 实现中用于组件存储的数据结构是一个预构建组件池,这些组件是可回收的。因此,添加一个实体就像为预构建组件赋值一样简单。 该系统旨在利用组件标识符而不是类型,这就是问题所在。 在序列化和反序列化时,组件被视为 BaseComponent 指针。

组件结构层次结构

struct BaseComponent {}; // struct used as base to store components

template<typename T>
struct Component : public BaseComponent {
static const uint_fast32_t ID; // identifier used by the rest of the system
}

struct SomeComponent : public Component<SomeComponent> {
// component specific data
}

我想要序列化、反序列化并将数据分配给 SomeComponent 中的适当字段的是组件特定数据。

我有一个简单的解决方案,但在干净的代码方面却相当可疑。我找到的解决方案是将组件内存直接转储到文件中,然后通过字符缓冲区将其读入内存。然而,这不允许指针,在我看来,这是非常令人厌恶的。我发现的另一个解决方案是,如果可能的话,使用一个可变参数函数,该函数使用可变参数扩展构造一个具有聚合初始化的临时函数。但是这个方法并没有解决序列化和反序列化,只解决了赋值问题。

因此,我的问题是:是否有一种好的方法来序列化和反序列化多态类型,一般来说,当不知道类型信息时,如果没有,是否有更好的方法来做到这一点?

最佳答案

我会考虑 CRTP在这种情况下的模式。基类定义序列化/反序列化函数,这些函数调用交付类中的实际实现。维基百科文章有一些很好的例子。

关于c++ - ECS序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52925664/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com