c++ - msgpack 打包结构

标签 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用于编码和解码的库,因为它可以大大简化我的任务。

唯一的问题是我不知道我到底该怎么做,这里和其他地方提供的几乎所有示例都只是尝试打包传统缓冲区( vector 、列表...),但我找不到结构打包!

那么,可以做到吗?如何做到?

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

谢谢。

最佳答案

是的,这是可行的。您可以使用 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

关于c++ - msgpack 打包结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322145/

相关文章:

java - 在Linux终端中执行java文件

java - 比较两个 HashMap 键是否相等?

c++ - 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色?

c++ - 从源代码构建 Qt 时,我可以制作或指定哪些部分?

C++ 初始化 std::vector<std::unique_ptr<AbstractClass>>

java - Java 中的套接字和进程

C++ 静态常量成员覆盖

perl - 如何在 Perl 中监听多个套接字?

algorithm - 如何找到以下递归代码的时间复杂度?

c# - 映射 URL 或本地路径的数据结构