2014-11-06 26 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