2017-02-06 8 views
0

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なぜ、このようなありませんが不思議?

答えて

0

これは、JavaテンプレートにはC++と同じ能力がないため、これはAPIがどのように判明したかを示しています。あなたが言ったように、複数のルーツを使用したい場合は、テンプレートバージョンを使用します。

+0

私はdiff言語でこのような違いがあるのか​​、そのような設計に特別な理由があるのか​​、root_typeの目的がわかりません。 – steveoreo

+0

'root_type'は、JSONのルートとして解析するものを特定する方法としても使用されます。しかし、それ以外は主に言葉の違いによると私は言った。 – Aardappel

関連する問題