Как подготовить msgpack для отправки структуры через инфраструктуру ZeroMQ? - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь установить связь между узлами через ZeroMQ.Мне нужно отправить struct из:

struct Content{
    std::vector<cv::Mat> image;
    std::string msg;
};

Я пытаюсь использовать msgpack:

Content content;
content.image = msg2;
content.mesaj = "naber kardes";

msgpack::type::tuple<Content> src(content);
//                            serialize the object into the buffer.
//                            any classes that implements
//                            write(const char*,size_t) can be a buffer.
std::stringstream buffer;
msgpack::pack(buffer, src);
cout << sizeof(buffer) << endl;

, но этодает:

/ usr / local / include / msgpack / v1 / object.hpp: 631: 11: ошибка: нет элемента с именем 'msgpack_pack' в 'Content'

все еще новичок в c ++.

Как я могу отправить свою структуру контента через ZeroMQ с помощью msgpack?

1 Ответ

0 голосов
/ 12 июня 2018

Вам необходимо предоставить функцию pack() для вашей Content struct:

namespace msgpack
{
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
{
namespace adaptor
{

template <>
struct pack<Content> {
    template <typename Stream>
    msgpack::packer<Stream>& operator()(
                msgpack::packer<Stream>& out, Content const& obj) const
    {
        out.pack(obj.image);
        out.pack(obj.msg);
        return out;
    }
};

}
}
}

Если ваше программное обеспечение не оценивает данные MessagePack, вам необходимо создать pack () функционирует в соответствии с ожиданиями формата / макета вашего получателя zmq / MessagePack.

Пример функции convert () (то же пространство имен, что и pack)() функция выше):

template <>
struct convert<Content> {
    msgpack::object const& operator()(
                msgpack::object const& o, Content& v) const
    {
        // unpack data in the same format as it was packed. see above!     
        return o;
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...