【问题标题】:msgpack to pack structuresmsgpack 打包结构
【发布时间】:2016-05-19 11:41:38
【问题描述】:

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

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 : 结构示例被简化了,我得到了一些非常复杂的。

谢谢。

【问题讨论】:

    标签: c++ sockets data-structures msgpack


    【解决方案1】:

    是的,这是可行的。你可以使用MSGPACK_DEFINE_MAP或MSGPACK_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

    【讨论】:

    • 但是如果它不是我自己的结构怎么办?示例here 仅展示了如何打包数组。
    • @PhilippLudwig 这些宏的目的是添加元数据以获得序列化所需成员的名称和地址。这是 C++ 缺乏的一个特性,所以你总是需要做额外的工作。在您链接的页面上,它显示了与我的结构类似的示例。您也可以尝试non-intrusive 方法,您可以在其中序列化其他人的课程 - 但这将是很多工作。您也许可以使用 Boost.Hana 围绕它进行一些元编程,但同样需要大量工作。
    • 感谢您的回答。我已经看过有关非侵入式方法的文档,但遗憾的是,它们缺乏有关如何实际执行所需的详细信息。我没有为此做很多工作,但是没有适当的文档或示例,我迷路了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多