【发布时间】:2013-07-31 14:33:43
【问题描述】:
我正在编写处理自定义 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 的方法。
有什么想法吗?
【问题讨论】:
-
也许这可以完成
String& operator>>( String, yourtype)的工作,实现为函数而不是类成员 -
再看一遍后,我终于明白了为什么我之前对 operator>> 的尝试没有奏效,我会用完整的结果来回答这个问题。