平面缓冲区中的多个根表

Multiple root tables in flatbuffers

我正在查看 Flatbuffers 以实现通信协议。当收到一条消息时,在我的例子中它可能包含许多不同的 table。如果我理解正确,在 Flatbuffers 中实现此目的的方法是使用一个 "root" table,它在联合中具有每个可能不同的 table。

在我的例子中,我已经知道传入的类型(类型是 header 的一部分)=> 我不一定需要能够将每个类型放在一个 table 中.但是,似乎无法将多个 table 标记为 "root" 类型。这意味着如果我定义了 tables FooBar 我只能得到一个 GetFoo()GetBar() 反序列化方法,但不能两者。

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

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

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