根据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++ 相同的功能。就像你说的,如果你想使用多个根,你使用模板化版本。