平面缓冲区中的多个根表

vil*_*pam 4 c++ serialization deserialization flatbuffers

我正在检查用于实现通信协议的 Flatbuffers。当收到一条消息时,就我而言,它可能包含许多不同的表。如果我理解正确,在 Flatbuffers 中实现这一点的方法是使用一个“根”表,该表在联合中包含每个可能的不同表。

就我而言,我已经知道传入类型(类型是标题的一部分)=> 我不一定需要能够将每种类型放在单个表中。但是,似乎不可能将多个表标记为“根”类型。这意味着,如果我已经定义了表Foo并且Bar我只能获得反序列化的一个GetFoo()或一个GetBar()方法,但不能同时获得两者。

我假设也可以将定义拆分到不同的模式文件中,但由于它们将共享一些子类,因此我还需要一个共享模式文件来用于公共定义。对于简单的情况,这似乎比必要的要复杂一些。

是否有另一种方法可以使用 Flatbuffers 反序列化多种不同类型?

Aar*_*pel 6

是的,你可以这样做。请注意,生成GetMyType()的只是模板的缩写GetRootAs<MyType>,您可以将其用于任何类型。