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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/object.hpp:664:34: error: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct msgpack::v2::object’ from an array of ‘const msgpack_object’ {aka ‘const struct msgpack_object’} [-Werror=class-memaccess] std::memcpy(&o, &v, sizeof(v)); ^ In file included from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object_fwd.hpp:17, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/adaptor/adaptor_base_decl.hpp:14, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/adaptor/adaptor_base_decl.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/adaptor/adaptor_base.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/object_decl.hpp:16, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object_decl.hpp:14, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack.hpp:10, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/example/cpp03/stream.cpp:10: /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v2/object_fwd.hpp:23:8: note: ‘struct msgpack::v2::object’ declared here struct object : v1::object { ^~~~~~ cc1plus: all warnings being treated as errors make[2]: *** [example/cpp03/CMakeFiles/stream.dir/build.make:63:example/cpp03/CMakeFiles/stream.dir/stream.cpp.o] 错误 1 make[2]: 离开目录“/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master” make[1]: *** [CMakeFiles/Makefile2:415:example/cpp03/CMakeFiles/stream.dir/all] 错误 2 make[1]: 离开目录“/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master”
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值