Jinja2cpp ValuesMap多元素初始化报no matching function错误怎么解决
错误原因
jinja2::ValuesMap本质是std::unordered_map<std::string, jinja2::Value>类型,要求存储的每一个值都必须是明确的jinja2::Value实例。- 你代码中
{"John", "Joe"}是无类型的花括号初始化列表,C++ 编译器无法自动推导出该列表需要转换为jinja2::Value类型的数组值,找不到匹配的构造函数,因此触发编译报错。
解决方案
你只需要显式将字符串列表声明为jinja2cpp识别的列表类型,让编译器能正确完成类型转换即可,有两种常用写法:
- 用
jinja2::ValuesList显式构造列表:
jinja2::ValuesMap params {{"users", jinja2::ValuesList{"John", "Joe"}}};
- 直接显式构造
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
相关产品推荐
相关产品推荐

