2016-05-19 2 views
2

У меня есть следующая структура (среди многих других), и я хочу отправить ее через сокет.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: пример структуры упрощен, у меня есть некоторые, которые серьезно усложняются.

Спасибо.

ответ

4

Да, это выполнимо. Вы можете использовать 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

+0

это было быстро. благодаря ! – Vtik