You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jinja2cpp ValuesMap多元素初始化报no matching function错误怎么解决

错误原因

  • jinja2::ValuesMap 本质是 std::unordered_map<std::string, jinja2::Value> 类型,要求存储的每一个值都必须是明确的 jinja2::Value 实例。
  • 你代码中 {"John", "Joe"} 是无类型的花括号初始化列表,C++ 编译器无法自动推导出该列表需要转换为 jinja2::Value 类型的数组值,找不到匹配的构造函数,因此触发编译报错。

解决方案

你只需要显式将字符串列表声明为jinja2cpp识别的列表类型,让编译器能正确完成类型转换即可,有两种常用写法:

  1. 用 jinja2::ValuesList 显式构造列表:
jinja2::ValuesMap params {{"users", jinja2::ValuesList{"John", "Joe"}}};
  1. 直接显式构造 jinja2::Value 包裹列表:
jinja2::ValuesMap params {{"users", jinja2::Value({"John", "Joe"})}};

修改后完整可运行代码如下:

int main() {
    string source = R"(
{% for user in users %}
{{user}}
{% endfor %}
    )";
    jinja2::Template tpl;
    // 仅修改此行即可
    jinja2::ValuesMap params {{"users", jinja2::ValuesList{"John", "Joe"}}};

    tpl.Load(source);
    string result = tpl.RenderAsString(params).value();
    cout << result;
    return 0;
}

编译运行后会按顺序输出 John 和 Joe 两个值。

内容的提问来源于stack exchange,提问作者Mehmet Aslan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:36:10