0

这些天来,我在 flatbuffers 方面遇到了很多困难,我可以使用一些帮助。我想使用 flatbuffer 通过 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 发送事件的发布者类。有没有一种很好或常见的方法来做到这一点?我在想这样的事情:

mPublisher.publishEvent(event::Event("event1", 0, "dataString"));
mPublisher.publishEvent(event::Event("event2", 1, byteArray));

上面的示例不起作用,因为没有这样的构造函数。有没有一种用不同数据创建多个事件的好方法?我应该如何将这些 flatbuffer-events 传递给像我的发布者这样的另一个类?我应该通过 flatbuffer 还是 event-offset?

4

1 回答 1

1

你只需要使用提供的实际构造函数,所以它看起来像:

event::CreateEvent(fbb, "event1", 0, fbb.CreateString("dataString"));

还有一个event::CreateByteArray等。看生成的代码,或者教程。

event::CreateEvent将偏移量返回到未完成的 FlatBuffer 中,因此通常不适合传递给非 FlatBuffer 函数。您需要调用fbb.Finish()该偏移量,然后将生成的缓冲区传递给其他函数(再次参见教程)。

于 2017-11-21T14:52:55.627 回答