FlatBuffer:如何动态向表中添加字段?

时间:2019-02-20 15:12:34

标签: c++ serialization deserialization flatbuffers

我的架构中有一个表为空(如下所示)。

table ClusterValue 
{
}

由于我事先不知道集群中的成员元素数量,因此我想以编程方式添加字段(C ++)。我遇到了一些方法,例如AddOffset,AddElement,AddStruct。但是我仍然不确定添加它的确切方法。

为了详细说明,假设我程序的输入是否是具有两个成员的字符串-一个字符串和一个数字。我想以编程方式向集群表添加两个字段(字符串和数字)并对其进行序列化。

1 个答案:

答案 0 :(得分:0)

不能。 FlatBuffers是一个静态类型的系统,必须预先知道所有可能的字段,并为它们的构造和访问生成C ++代码。您可以动态决定要添加到表中的字段(根据某些条件通过调用add_field_name()),但它必须是架构中的字段之一。

如果这对您来说不够动态,我建议您使用FlexBuffers(https://google.github.io/flatbuffers/flexbuffers.html),它可以利用JSON的动态特性为您提供FlatBuffers的效率。在这里,您可以启动矢量或地图,并在运行时无限制地向其中添加任何值或字段。