这些天来,我很难吃平缓冲,我需要一些帮助。我想使用平面缓冲区在TCP上发送包含不同数据的事件(使用ZeroMQ)。因此,我使用的是Union。
// 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++类中,我希望创建新的事件,并将它们传递给通过ZeroMQ发送事件的Publisher类。这样做有什么好的或常见的方法吗?我在想这样的事情:
mPublisher.publishEvent(event::Event("event1", 0, "dataString"));
mPublisher.publishEvent(event::Event("event2", 1, byteArray));上面的示例不起作用,因为没有这样的构造函数。有一种用不同数据创建多个事件的好方法吗?我应该如何将这些平面缓冲区事件传递给像我的出版商这样的另一个类?我应该传递平面缓冲区还是事件偏移量?
发布于 2017-11-21 14:52:55
您只需要使用所提供的实际构造函数,因此它看起来如下所示:
event::CreateEvent(fbb, "event1", 0, fbb.CreateString("dataString"));还有一个event::CreateByteArray等等,请参阅生成的代码或教程。
event::CreateEvent将偏移量返回到未完成的FlatBuffer中,因此通常不适合传递给非FlatBuffer函数。您将希望对该偏移量调用fbb.Finish(),然后将结果缓冲区传递给其他函数(同样,请参阅本教程)。
https://stackoverflow.com/questions/47410801
复制相似问题