2016-01-13 1 views
1

В вопросе Deserializing a heterogeneous map with MessagePack in C++ ответ относится к gist, который содержит пример на основе рекурсивного boost::variant с msgpack. Я пытаюсь воспроизвести это с последней версией библиотеки msgpack-c (1.3.0) и получить ряд ошибок во время компиляции. Некоторые из них связаны с изменениями типов в API (типы msgpack DOUBLE и RAW больше нет), другие кажутся более фундаментальными:Использование msgpack в C++ с вариантами структур данных

In file included from msgpack-c/include/msgpack.hpp:10:0, 
      from variant.cpp:2: 
msgpack-c/include/msgpack/object.hpp: In instantiation of ‘const msgpack::v1::object& msgpack::v1::adaptor::convert<T, Enabler>::operator()(const 
<... lengthy output snipped for clarity ...> 
    msgpack::v1::object&, T&) const [with T = boost::detail::variant::void_>’ has no member named ‘msgpack_unpack’ 
v.msgpack_unpack(o.convert()); 

и аналогичные сообщения о не член имени msgpack_pack.

Есть ли обновленная версия или пример этого, что я совместим с последней версией msgpack-c?

Я компиляция на машине CentOS7 с GCC версией 4.8.5, форсируют 1,58, msgpack-с, включенные в качестве заголовка только, используя следующую команду:

g++ --std=c++11 -Imsgpack-c/include -o variant variant.cpp 
+0

Похоже, ваш титул вопрос и вопрос Адрес тело совершенно разные темы - собственно вопрос, кажется, спросить, как использовать msgpack с C++ 'variant's, но тело, вместо расширения на этом, в основном просто спрашивает, как использовать msgpack. – Cubic

ответ

1

Есть обновленная суть или Например, я совместим с последней версией msgpack-c?

Есть примеры, которые используют вариант в репозитории msgpack-c.

См:

https://github.com/msgpack/msgpack-c/blob/master/example/boost/msgpack_variant_capitalize.cpp https://github.com/msgpack/msgpack-c/blob/master/example/boost/msgpack_variant_mapbased.cpp

msgpack-с содержит вариантные адаптеры в настоящее время. Он основан на следующей идее:

Deserializing a heterogeneous map with MessagePack in C++

Вот адаптер:

https://github.com/msgpack/msgpack-c/blob/master/include/msgpack/adaptor/boost/msgpack_variant.hpp

Следующее обсуждение может помочь понять концепцию варианта:

https://github.com/msgpack/msgpack-c/pull/349

Чтобы использовать адаптер, вам необходимо определить MSGPAC K_USE_BOOST.

См:

https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_use_boost-since-120

+0

Это очень полезно, спасибо вам большое! Важнейшими элементами для меня было узнать, что необходимо определить MSGPACK_USE_BOOST и что можно использовать msgpack :: type :: variant в structs/classes для кодирования в msgpack. –