2014-11-06 76 views
4

我寫了一個模板(比如下面),但它無法編譯如何編寫模板向量轉換成JSON ::值(jsoncpp)

template<class t, template<typename> class iterable> 
Json::Value iterable2json(const iterable<t>& cont) 
{ 
    Json::Value v; 
    for(const t& elt : cont) 
    { 
     v.append(elt); 
    } 
    return v; 
} 

std::vector<int> vec{1,2,3}; 
Json::Value v = iterable2json(vec) 

錯誤C3312:發現類型沒有可調用的「開始」功能'常量性病:: _ Vector_val < _Val_types>'

與[_Val_types =標準:: _ Simple_types]

見參考起作用模板實例「的Json ::值iterable2json,性病:: _ Vector_val>(常量的std :: _Vector_val < _Val_types> &)」被編譯

與[_Value_type = INT,_Val_types =標準:: _ Simple_types]

錯誤C3312:沒有可調用 '常量性病端' 找到類型函數 ':: _ Vector_val < _Val_types>'

與[_Val_types =標準:: _ Simple_types]

錯誤C2065:ELT':未聲明的標識符

+0

你可以添加你遇到的編譯器錯誤嗎? – NicholasM 2014-11-06 06:56:49

回答

5

的問題是,編譯器不能推斷出類型t,因爲它是間接測定日粗略模板模板參數。但是,實際上並不需要做這樣的事情!下面的作品就好了:

template <typename Iterable> 
Json::Value iterable2json(Iterable const& cont) { 
    Json::Value v; 
    for (auto&& element: cont) { 
     v.append(element); 
    } 
    return v; 
} 

(好吧,因爲我沒有使用的是我沒有帶試圖編譯它Json庫,但我認爲它應該是罰款)。

+0

它的工作原理。感謝您的幫助,Dietmar。 我想我對這個問題感到困惑。 – tryer3000 2014-11-06 08:12:51