FlatBuffers C++从缓冲区转换为对象,仅适用于root_type(而Java具有所有)



根据flatbuffers示例,在c ++上,GetMonster函数被生成为monster定义为root_type。显然,1 个架构只能有 1 个root_type。这限制了每个模式只有 1 种类型可以从 buf 直接转换为 obj。 与解包相同

而对于java,模式中定义的每个类型都有函数"getRootAs..."生成,非常方便。每种类型都可以直接从ByteBuffer轻松转换。

因此,在使用 c++ 的网络游戏用例中,有很多类型可以通过网络发送,没有直接关系。我们是否应该为每种类型定义一个模式文件?为了生成获取/解压缩?

附言我知道我可以自己做

auto nonRootCustomTypeObj = flatbuffers::GetRoot<NonRootCustomType>(fbb.GetBufferPointer());

但是想知道为什么这样的获取/解包转换功能不适用于所有类型,而仅适用于C ++中的root_type?

这就是 API 的结果,因为 Java 模板没有与 C++ 相同的功能。就像你说的,如果你想使用多个根,你使用模板化版本。

相关内容

最新更新