使用C++中的MessagePack反序列化异构映射

bde*_*ham 5 c++ msgpack

我正在使用带有C++的MessagePack,我正在尝试反序列化这个Python映射的等价物:

{'metadata': {'date': '2014-06-25', 'user_id': 501},
 'values': [3.0, 4.0, 5.0],
 'version': 1}
Run Code Online (Sandbox Code Playgroud)

顶级对象是带有字符串键的映射,但值的类型完全不同.我的代码提前知道对象的结构应该是什么; 我应该能够声明一个整数,然后告诉我的反序列化代码," version键的值是一个整数,所以将该整数的值放入这个内存地址."

问题是我甚至不确定如何达到我的C++代码可以将此结构视为地图的程度.我期待做类似的事情

msgpack::unpacker unpacker;
// ...copy the data into unpacker's buffer...

msgpack::unpacked message;
std::map<std::string, anything> output_map;

unpacker.next(&message);
msgpack::object obj = message.get();
obj.convert(&output_map);

int version_number = output_map.at("version");
Run Code Online (Sandbox Code Playgroud)

有没有可能的类型(anything)在这里工作?MessagePack文档只有一些简单的例子,这篇博文更好,但不包括这个用例.

bde*_*ham 0

我最终决定押注于此并编写自己的基于文本的序列化格式。它\xe2\x80\x99s 通常不像 MessagePack 那样有用,但它允许我掩盖这些静态类型的问题。

\n