繁体   English   中英

在 C++ 中使用带有变体数据结构的 msgpack

[英]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/blob/cpp_master/include/msgpack/v1/adaptor/boost/msgpack_variant.hpp

以下讨论可能有助于理解变体的概念:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM