2013-07-31 37 views
2

我工作的一段代碼與自定義字符串實現,而不是的std :: string交易(長的故事,但是這個有各種原因被使用),我將從此處稱爲「字符串」。msgpack開箱到任意對象,不msgpack_define

我能夠輕鬆地收拾字符串不使用「原始」型包裝的原始字符字節,大小的問題,但我有拆包的問題。

我能夠手動它解,如下所示。

// 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 

回覆然後我想不通得到msgpack ::對象開展「implicit_type」對象的任何方式。

任何想法?

+1

這也許可以做一個函數,而不是類 – hetepeperfan

+0

的成員實施的工作'字符串和操作>>(字符串,yourtype)'我們再看一下我終於得到了之後,爲什麼我在嘗試操作之前>>不工作,我會用全部結果回答這個問題。 – Zeroshade

回答

2

所以我想它了!由於hetepeperfan的想法

採取另一個打擊使用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 <>」並轉換功能。真棒!