1

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

而对于java来说,schema中定义的每个类型都会生成函数“getRootAs...”,非常方便。每种类型都可以直接从 ByteBuffer 轻松转换。

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

PS我知道我可以自己做

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

但想知道为什么这种 Get/Unpack 转换功能不适用于所有类型,但仅适用于 c++ 中的 root_type?

4

1 回答 1

0

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

于 2017-02-06T05:56:32.930 回答