[英]Using msgpack in C++ with variant data structures
在使用 C++ 中的MessagePack 反序列化异构映射的问题中,答案是指包含基于递归boost::variant
和 msgpack 的示例的要点。 我试图用最新的 msgpack-c 库版本 ( 1.3.0 ) 复制它,并在编译时遇到许多错误。 其中一些与 API 中的类型更改有关(msgpack 类型 DOUBLE 和 RAW 不再存在),其他的似乎更基本:
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 版本兼容?
我正在使用以下命令在带有 gcc 版本 4.8.5、boost 1.58、msgpack-c 仅作为标头包含的 CentOS7 机器上进行编译:
g++ --std=c++11 -Imsgpack-c/include -o variant variant.cpp
是否有更新的要点或示例与最新的 msgpack-c 版本兼容?
在 msgpack-c 存储库中有使用变体的示例。
看:
https://github.com/msgpack/msgpack-c/blob/cpp_master/example/boost/msgpack_variant_capitalize.cpp https://github.com/msgpack/msgpack-c/blob/cpp_master/example/boost/msgpack_variant_mapbased.cpp
msgpack-c 现在包含变体适配器。 它基于以下想法:
在 C++ 中使用 MessagePack 反序列化异构映射
这是适配器:
以下讨论可能有助于理解变体的概念:
https://github.com/msgpack/msgpack-c/pull/349
为了使用适配器,您需要定义 MSGPACK_USE_BOOST。
看:
https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_use_boost-since-120
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.