flatbuffersサンプルによると、C++では、モンスターがroot_typeとして定義されているため、GetMonster関数が生成されます。 明らかに1つのスキーマは1つのroot_typeしか持つことができません。スキーマごとに1つの型しかbufからobjに直接変換できないという制限がありました。 UnPackと同じflatbuffers C++バッファからオブジェクトへの変換はroot_typeのみ可能(ただし、javaはすべて)
Javaの場合、スキーマで定義されたすべての型は関数 "getRootAs ..."が生成されていますが、非常に便利です。すべての型をByteBufferから直接簡単に変換できます。
したがって、C++のネットワークゲームのユースケースでは、直接の関係なくネットワーク経由で送信する種類がたくさんあります。 各タイプごとに1つのスキーマファイルを定義する予定ですか? Get/Unpackを生成するには?
P.S.私は
auto nonRootCustomTypeObj = flatbuffers::GetRoot<NonRootCustomType>(fbb.GetBufferPointer());
ことによってそれを自分で行うことができます理解していますが、特に、C++でゲット/全てのタイプに利用できる開梱変換機能だけroot_typeなぜ、このようなありませんが不思議?
私はdiff言語でこのような違いがあるのか、そのような設計に特別な理由があるのか、root_typeの目的がわかりません。 – steveoreo
'root_type'は、JSONのルートとして解析するものを特定する方法としても使用されます。しかし、それ以外は主に言葉の違いによると私は言った。 – Aardappel