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

Using msgpack in C++ with variant data structures

本文关键字:数据结构 msgpack C++      更新时间:2023-10-16

在C++中用MessagePack反序列化异构映射的问题中,答案指的是一个要点,其中包含一个基于递归boost::variant和msgpack的示例。我正试图用最新的msgpack-c库版本(1.3.0)复制这一点,但在编译时出现了一些错误。其中一些与API中类型的变化有关(消息包类型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());

以及关于没有名为CCD_ 2的成员的类似消息。

是否有更新的要点或示例与最新的msgpack-c版本兼容?

我在一台CentOS7机器上编译,使用以下命令,gcc版本4.8.5,boost 1.58,msgpack-c仅作为标头包含:

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.cpphttps://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-自120 以来