nok*_*oko 2 c++ zeromq messagepack msgpack
我似乎不能送vector的struct,我通过ZeroMQ序列与msgpack.
它是这个结构的向量:
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);
};
Run Code Online (Sandbox Code Playgroud)
在发送方:
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
Run Code Online (Sandbox Code Playgroud)
难道我构建我sbuffer还是message_t错了吗?
在接收方:
我不确定我是否应该投射,msg.data()但我找不到任何关于如何使用ZeroMQ和messagepack的好文档.
message_t msg;
server_socket->recv(&msg);
msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(msg.data()), msg.size());
msgpack::object obj = unpacked.get();
std::vector<MyData> data;
obj.convert(&data);
printf("size %d\n", data.size());
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
在抛出'msgpack :: type_error'的实例后调用终止
what():std :: bad_cast Aborted
我将不胜感激任何帮助.
这似乎为我做了诀窍:
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.size());
memcpy(msg.data(), sbuf.data(), sbuf.size());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2826 次 |
| 最近记录: |