这些天我和flatbuffers很挣扎,我可以帮忙。我想使用flatbuffer通过TCP发送包含不同数据的事件(使用ZeroMQ)。因此,我正在使用联盟。
// event.fbs
namespace event;
table ByteArray {
bytes:[byte];
}
table OtherData {
id:uint;
value:uint;
}
union EventData {
ByteArray,
OtherData,
String:string
}
table Event {
name:string (key);
timestamp:ulong = -1;
data:EventData;
}
root_type Event;
在我的C ++类中,我想创建新事件并将它们传输到我的Publisher类,它通过ZeroMQ发送事件。有一个很好的或常见的方式吗?我在考虑这样的事情:
mPublisher.publishEvent(event::Event("event1", 0, "dataString"));
mPublisher.publishEvent(event::Event("event2", 1, byteArray));
上面的例子不起作用,因为没有这样的构造函数。有没有一种很好的方法来创建具有不同数据的多个事件?我怎么能把这些flatbuffer-events传递给像我的出版商这样的另一个班级呢?我应该通过flatbuffer还是事件偏移?
您只需要使用提供的实际构造函数,因此它看起来像:
event::CreateEvent(fbb, "event1", 0, fbb.CreateString("dataString"));
还有一个event::CreateByteArray
等。请参阅生成的代码或教程。
event::CreateEvent
将一个偏移量返回到未完成的FlatBuffer中,因此通常不适合传递给非FlatBuffer函数。您需要在该偏移量上调用fbb.Finish()
,然后将生成的缓冲区传递给其他函数(再次参见教程)。