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

标签 c++ templates

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

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/

相关文章:

amazon-web-services - cloudformation 输出部分验证错误

c++ - 在 C++ 中模板化一个 'for' 循环?

c++ - 任何用于测试扩展 C/C++ #define 宏的实用程序?

c++ - 只有当值尾随字母 'e'(大写和小写)时,使用 std::cin 的输入才不适用于 float

具有 const 类型或简单类型参数的方法的 C++ 模板函数

c++ - 应用程序中两个不同版本的库

javascript - JavaScript 支持哪些好的模板语言?

c++ - "Main"的多重定义

c++ - Excel 公式计算

c++ - 虚函数问题