gpt4 book ai didi

flatbuffers - 如何在 Flatbuffers 中序列化结构的并集

转载 作者:行者123 更新时间:2023-12-05 04:05:24 29 4
gpt4 key购买 nike

假设我有以下 Flatbuffers 架构文件:

union WeaponProperties {
sword: PSword,
axe: PAxe,
mace: PMace,
}
struct PSword { length: float32; straight: bool; }
struct PAxe { bearded: bool; }
struct PMace { hardness: int8; }

table Weapon {
name: string;
mindamage: int32;
maxdamage: int32;
swingtime: float32;
weight: float32;
properties: WeaponProperties;
}
root_type Weapon;

在我运行 flatc 之后编译器在此架构文件上生成 weapon_generated.h文件将大致具有以下结构:

enum WeaponProperties {
WeaponProperties_NONE = 0,
WeaponProperties_sword = 1,
WeaponProperties_axe = 2,
WeaponProperties_mace = 3,
...
};
struct PSword { ... }
struct PAxe { ... }
struct PMace { ... }

class Weapon { ... }
class WeaponBuilder { ... }

inline flatbuffers::Offset<Weapon> CreateWeaponDirect(
flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
int32_t mindamage = 0,
int32_t maxdamage = 0,
float swingtime = 0.0f,
float weight = 0.0f,
WeaponProperties properties_type = WeaponProperties_NONE,
flatbuffers::Offset<void> properties = 0) { ... }

值得注意的是,为了使用 CreateWeaponDirect()WeaponBuilder::add_properties() , 我必须通过 properties必须是 flatbuffers::Offset<void> 类型的参数.然而,我不明白的是如何首先创建这个对象。据我所知,生成的 .h 中没有函数/方法。将返回此类对象的文件。我可以创建类型为 PSword 的对象/PAxe/PMace当然可以,但是如何将其转换为 FlatBuffers 偏移量?

最佳答案

你想要 FlatBufferBuilder::CreateStruct。与通常序列化结构(内联)的方式相比,这确实有点奇怪,这是由联合希望所有联合成员大小相同,因此它们通过偏移量引用。

关于flatbuffers - 如何在 Flatbuffers 中序列化结构的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272602/

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