msgpack-c 官方文档整理翻译之object

msgpack::object

什么是 msgpack::object

msgpack::object 是一种变体类型。 msgpack::object 的内部类型对应于 msgpack 格式。这是类型列表。

MessagePack typemsgpack-c type
nilmsgpack::type::NIL
booleanmsgpack::type::BOOLEAN
uintmsgpack::type::POSITIVE_INTEGER
intmsgpack::type::NEGATIVE_INTEGER
float 32msgpack::type::FLOAT32
float 64msgpack::type::FLOAT64
strmsgpack::type::STR
binmsgpack::type::BIN
extmsgpack::type::EXT
arraymsgpack::type::ARRAY
mapmsgpack::type::MAP

您可以通过类型成员变量获取 msgpack::object 的类型。

如果 msgpack::object 的类型是数组(array)或映射(map),则该对象有子对象。所以 msgpack::object 是一个复合结构。

object1

当 msgpack::object 的类型是 str、bin 或 ext 时,msgpack::object 可能有外部内存的引用。

object2

当你使用 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(转换)

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值