gpt4 book ai didi

c++ - 如何编写模板将 vector 转换为 Json::Value (jsoncpp)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:10 35 4
gpt4 key购买 nike

我写了一个模板(如下所示)但是编译失败

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<_Val_types>”的可调用“开始”函数

与[ _Val_types=std::_Simple_types ]

参见正在编译的函数模板实例化 'Json::Value iterable2json,std::_Vector_val>(const std::_Vector_val<_Val_types> &)' 的引用

使用[ _Value_type=int, _Val_types=std::_Simple_types ]

错误 C3312:找不到类型为“const std::_Vector_val<_Val_types>”的可调用“结束”函数

与[ _Val_types=std::_Simple_types ]

error 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 库,所以我没有尝试编译它,但我认为它应该没问题)。

关于c++ - 如何编写模板将 vector 转换为 Json::Value (jsoncpp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26773043/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com