FlatBuffers C++从缓冲区转换为对象,仅适用于root_type(而Java具有所有)
flatbuffers c++ convert from buffer to object only available for root_type (whilst java has all)
根据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++ 相同的功能。就像你说的,如果你想使用多个根,你使用模板化版本。
相关文章:
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 如何将分支添加到已存在的TTree:ROOT
- 控制到达非空函数clang(-Wreturn-type)的末尾
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 将系数存储在头文件的数组中("does not name a type"错误)
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- OpenCV CV_16F type
- C++ "错误:在'类 std::result_of< ... >"中没有名为'type'的类型"
- 将内存分配返回值强制转换为 TYPE 数组
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- reference_wrapper导致"incomplete type is not allowed"
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 由于"error C4430: missing type specifier - int assumed. Note: C++ does not support default-int",我现在无法编
- 如何解决"'mutex' in namespace 'std' does not name a type"?