我正在编写一套代码,它处理的是自定义字符串实现,而不是std::string (说来话长,但出于各种原因必须使用它),从现在起,我将将其称为" String“。
我能够轻松地打包字符串,而不用问题,使用" raw“类型来打包原始字符字节和大小,但是我在解压它时遇到了问题。
我能够手动解压它,如下所示。
// 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模板函数,但一直无法管理它。我无权修改字符串类以添加msgpack_unpack函数,也无法添加MSGPACK_DEFINE
我尝试创建一个结构并给它一个msgpack_unpack函数,但显然它用msgpack::object::implicit_type调用它,编译器用
error: 'struct msgpack::object::implicit_type' is private然后,我想不出从"implicit_type“对象中获取msgpack::object的任何方法。
有什么想法吗?
发布于 2013-07-31 17:50:53
所以我想出来了!多亏了这一想法
在使用operator>>重载后,在operator>>被重载之前阻止它工作的问题是从msgpack代码中调用的。
namespace msgpack {
String& operator>>(msgpack::object o, String& v) {
v = String(o.via.raw.ptr, o.via.raw.size);
return v;
}
}我需要同时使用msgpack命名空间,并通过通过引用返回字符串和接受对象而不是引用来匹配签名。这似乎有点可笑,但它有效,我现在可以使用内置的"as<>“和转换功能。太棒了!
https://stackoverflow.com/questions/17973310
复制相似问题