如何编写模板将矢量转换为Json::Value(jsoncpp)

how to write a template converts vector to Json::Value (jsoncpp)

本文关键字:Json Value jsoncpp 转换 何编写      更新时间:2023-10-16

我写了一个模板(如下),但它无法编译

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:找不到类型"const-std::_Vector_val<"的可调用"begin"函数_Val_types>'

带有[_Val_types=std::_Simple_types]

请参阅正在编译的函数模板实例化"Json::Value iterable2json,std::_Vector_val>(const std::-Vector_vall<_val_types>&)"的参考

具有[_Value_type=int,_Val_types=std::_Simple_types]

错误C3312:找不到类型"const-std::_Vector_val&lt_Val_types>'

带有[_Val_types=std::_Simple_types]

错误C2065:"elt":未声明的标识符

问题是编译器无法推导类型t,因为它是通过模板模板参数间接确定的。然而,实际上一开始就没有必要做这样的事情!以下操作很好:

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

(好吧,由于我没有你正在使用的Json库,我没有尝试编译它,但我认为它应该很好)。