我正在编写处理自定义 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 的方法。
有任何想法吗?