gpt4 book ai didi

c++ - 在没有 msgpack_define 的情况下将 msgpack 解包到任意对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:36 32 4
gpt4 key购买 nike

我正在编写处理自定义 String 实现而不是 std::string 的代码主体(说来话长,但由于各种原因必须使用它),我将在此处将其称为“String”上。

我能够使用“原始”类型轻松打包字符串而不会出现问题,以打包原始字符字节和大小,但我在解包时遇到了问题。

我能够手动解压它,如下所示。

// before this I've unpacked to the point where the following object has the string
msgpack::object_kv& kv = obj.via.map.ptr[0];
// kv.key == the String I want
String key = String(key.via.raw.ptr, key.via.raw.size); // this works

但我想使用内置的 >> 运算符或 .as 模板函数,但无法管理它。我无权修改 String 类以添加 msgpack_unpack 函数或添加 MSGPACK_DEFINE

我尝试创建一个结构并给它一个 msgpack_unpack 函数,但显然它用我的编译器回复的 msgpack::object::implicit_type 调用它

error: 'struct msgpack::object::implicit_type' is private

然后我想不出任何方法从“implicit_type”对象中获取 msgpack::object。

有什么想法吗?

最佳答案

所以我想通了!感谢 hetepeperfan 的想法

在再次尝试使用运算符>> 重载之后,在从 msgpack 代码调用运算符>> 重载的奇怪方式之前阻止它工作的问题。

namespace msgpack {
String& operator>>(msgpack::object o, String& v) {
v = String(o.via.raw.ptr, o.via.raw.size);
return v;
}
}

我需要同时使用 msgpack 命名空间,通过引用返回字符串来匹配签名,并通过引用获取 NOT 中的对象。这看起来有点荒谬,但它确实有效,我现在可以使用内置的“as<>”和转换功能。太棒了!

关于c++ - 在没有 msgpack_define 的情况下将 msgpack 解包到任意对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17973310/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com