От этот, кажется довольно ясным, что вы можете сериализовать свои собственные структуры. Мне нужно сериализовать структуры из внешней (на языке C) библиотеки. Как вы используете msgpack со структурами / классами, которые вы не можете изменить?
Вроде как, просто концепция того, что я хочу сделать:
#include <foo.h>
#include <msgpack.hpp>
FooObj* fo, fo2;
fo->bar = 0x00ff0000;
fo->lounge = 0x0000ff00;
fo->saloon = 0x000000ff;
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, *fo);
//send as msg / recv as req
msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(req.data()), req.size());
msgpack::object obj = unpacked.get();
// convert it back into Foo
obj.convert(*bp);
Чтобы быть более ясным, ошибка, которую я должен избежать /usr/include/msgpack/object.hpp:218:4: error: no member named 'msgpack_pack' in 'Foo'
от компоновщика.
Примечание: если невозможно использовать msgpack в c ++ со сторонними — не стандартными библиотеками — классами и структурами, мне нужно найти решение для сериализации, которое справится с этим. И, если нужно написать всеобъемлющие обертки для каждого стороннего класса, который будет сериализован, я считаю, что это невозможно. Библиотека, которая заставляет меня синхронизировать код с Другой изменения вверх по течению просто используйте это не полезно для меня.
Извините за поздний ответ, но мне просто пришлось разобраться с той же проблемой, см. Мой ответ Вот.
Других решений пока нет …