msgpack打包结构

时间:2016-05-19 11:41:39

标签: c++ sockets data-structures msgpack

我有以下结构(以及许多其他结构),我想通过套接字发送它。

struct Position
{
    float x; // position selon x
    float y; // position selon y
    float theta; // orientation % z
    Position (float x_, float y_, float theta_): x(x_), y(y_), theta(theta_){}
    Position(){}
};

但首先,出于解码目的,我考虑使用msgpack库进行编码和解码,因为它可以大大简化我的任务。

唯一的问题是我无法弄清楚我究竟能做到这一点,几乎所有这里和其他地方的例子都只是试图打包常规缓冲区(向量,列表......)但没有结构包装我可以找到!

那么,它可以完成吗?它是如何做到的?

PS:简化了结构示例,我得到了一些非常复杂的结构。

感谢。

1 个答案:

答案 0 :(得分:4)

是的,它可行。您可以使用MSGPACK_DEFINE_MAPMSGPACK_DEFINE_ARRAY

struct Position
{
    float x; // position selon x
    float y; // position selon y
    float theta; // orientation % z
    Position (float x_, float y_, float theta_): x(x_), y(y_), theta(theta_){}
    Position(){}
    MSGPACK_DEFINE_MAP(x, y, theta)
};

此宏将生成所需的适配器功能。

不同之处在于数组将只列出您的成员(因此更紧凑),而地图将包含结构成员作为键值对。

来源:https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_adaptor#defining-custom-adaptors