msgpack::object
什么是 msgpack::object
msgpack::object 是一种变体类型。 msgpack::object 的内部类型对应于 msgpack 格式。这是类型列表。
MessagePack type | msgpack-c type |
---|---|
nil | msgpack::type::NIL |
boolean | msgpack::type::BOOLEAN |
uint | msgpack::type::POSITIVE_INTEGER |
int | msgpack::type::NEGATIVE_INTEGER |
float 32 | msgpack::type::FLOAT32 |
float 64 | msgpack::type::FLOAT64 |
str | msgpack::type::STR |
bin | msgpack::type::BIN |
ext | msgpack::type::EXT |
array | msgpack::type::ARRAY |
map | msgpack::type::MAP |
您可以通过类型成员变量获取 msgpack::object 的类型。
如果 msgpack::object 的类型是数组(array)或映射(map),则该对象有子对象。所以 msgpack::object 是一个复合结构。
当 msgpack::object 的类型是 str、bin 或 ext 时,msgpack::object 可能有外部内存的引用。
当你使用 msgpack::unpacker 时,msgpack::object_handle 管理所有分配的内存。将 msgpack::object_handle 视为智能指针。
当你使用没有 unpack_referenc_func 的 msgpack::unpack() 函数时,msgpack::object_handle 管理所有分配的内存。如果您提供一个返回 true 的自定义 unpack_referenc_func,您需要在未打包的 msgpack::object_handle 存在时保持传递给 msgpack::unpack() 的数据的生命周期。
Conversion(转换)
当你解压 msgpack 格式的数据时,你会从 msgpack::object_handle 获得 msgpack::object。然后你从 msgpack::object 获取各种类型的值。如果要从 msgpack::object 转换为自定义类型,请参阅适配器。
您可以使用以下构造函数从各种类型的值创建 msgpack::object。如果要从自定义类型创建 msgpack::object,请参阅 https://github.com/redboltz/msgpack-c/wiki/v2_0_cpp_adaptor#object 和 https://github.com/redboltz/msgpack-c/wiki/v2_0_cpp_adaptor#object_with_zone
template <typename T>
object(const T& v, zone& z);
你需要通过一个zone。当对象包含数组和/或映射时,子对象被分配在zone中。具有对应于 str 和 bin 的类型的值,该值的内容被复制到zone中,但有一个例外。例外是 msgpack::type::raw_ref。当您使用 raw_ref 调用 msgpack::object 构造函数时,如下所示:
msgpack::object obj(msgpack::type::raw_ref(data, size), zone);
数据不会被复制到zone。
Q.E.D.