【问题标题】:flatbuffers c++ convert from buffer to object only available for root_type (whilst java has all)flatbuffers c ++从缓冲区转换为仅适用于root_type的对象(而java拥有所有)
【发布时间】:2017-02-06 03:01:04
【问题描述】:

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

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

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

附:我知道我可以自己做

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

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

【问题讨论】:

    标签: java c++ flatbuffers


    【解决方案1】:

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

    【讨论】:

    • 只是我不明白为什么 diff 语言之间会有这种差异,或者这种设计是否有任何具体原因,以及 root_type 的目的。
    • root_type 也被用作识别在 JSON 中解析为根的方法。但除此之外,正如我所说,这主要是由于语言的差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多