【问题标题】:how to write a template converts vector to Json::Value (jsoncpp)如何编写模板将向量转换为 Json::Value (jsoncpp)
【发布时间】:2015-01-02 13:55:27
【问题描述】:

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

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> &)' 的参考

with[ _Value_type=int, _Val_types=std::_Simple_types ]

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

与[_Val_types=std::_Simple_types]

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

【问题讨论】:

  • 能否请您添加您遇到的编译器错误?

标签: c++ templates


【解决方案1】:

问题是编译器无法推断出类型t,因为它是通过模板模板参数间接确定的。但是,实际上根本没有必要做那样的事情!以下工作正常:

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

(好吧,因为我没有您正在使用的Json 库,所以我没有尝试编译它,但我认为应该没问题)。

【讨论】:

  • 它有效。谢谢你的帮助,迪特玛。我想我对这个问题感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2021-04-03
  • 1970-01-01
  • 2013-07-27
  • 2021-12-24
  • 2023-01-22
  • 2015-06-24
相关资源
最近更新 更多