使用msgpack通过zeromq发送矢量

时间:2013-04-09 09:13:37

标签: c++ zeromq msgpack messagepack

我似乎无法通过ZeroMQ发送我使用msgpack序列化的vector {/ 1}}。

这是这个结构的载体:

struct

在发送方:

struct MyData { MyData() : id(0), x(0), y(0), a(0) {} MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {} MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {} double id; double x; double y; double a; MSGPACK_DEFINE(id, x, y, a); }; data

std::vector<MyData>

我构建了msgpack::sbuffer sbuf; msgpack::pack(sbuf, data); zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL); local_socket->send(msg); // this is just zeromq's send function sbuffer错误吗?

在接收方:

我不确定我是否应该投射message_t但是我找不到任何关于如何使用ZeroMQ和messagepack的好文档。

msg.data()

我收到以下错误:

  

在抛出'msgpack :: type_error'实例后终止调用   what():std :: bad_cast Aborted

我将不胜感激。

1 个答案:

答案 0 :(得分:6)

这对我来说似乎已经成功了:

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.size());
memcpy(msg.data(), sbuf.data(), sbuf.size());