ExprTK表达式中如何直接使用向量字面量作为函数参数?
ExprTK中直接传递向量字面量给
all_true函数的问题 问题描述
在ExprTK表达式中尝试直接用向量字面量作为all_true函数的参数,比如写all_true({1,1,0,1,1}),结果触发错误ERR238:Expected '}' instead of: ','。
已知两种可行但不够直观的写法:
- 使用预先注册的向量变量,比如
all_true(y),其中y是已经注册到符号表的double数组 - 先在表达式内定义向量变量再调用,比如
var v[5]:={1,1,0,1,1};all_true(v)
需要确认直接传递向量字面量的写法是否被ExprTK支持,或者是不是语法有误。
测试代码
#include "exprtk.hpp" #include <stdio.h> int main(void) { typedef exprtk::symbol_table<double> symbol_table_t; typedef exprtk::expression<double> expression_t; typedef exprtk::parser<double> parser_t; typedef exprtk::parser_error::type err_t; double y[] = { 1, 1, 0, 1, 1 }; exprtk::rtl::vecops::package<double> vecops_package; symbol_table_t symbol_table; symbol_table.add_vector("y",y); symbol_table.add_package(vecops_package); expression_t expression; expression.register_symbol_table(symbol_table); parser_t parser; // all_true(y) if (parser.compile("all_true(y)",expression)) { printf("%.1f\n",expression.value()); } else { printf("Error: %s\n", parser.error().c_str()); } // all_true({1,1,0,1,1}) if (parser.compile("all_true({1,1,0,1,1})",expression)) { printf("%.1f\n",expression.value()); } else { printf("Error: %s\n", parser.error().c_str()); } // var v[5]:={1,1,0,1,1};all_true(v) if (parser.compile("var v[5]:={1,1,0,1,1};all_true(v)",expression)) { printf("%.1f\n",expression.value()); } else { printf("Error: %s\n", parser.error().c_str()); } return 0; }
结论
ExprTK不支持直接将向量字面量作为函数参数传递,这是当前语法的固有限制。
ExprTK的向量字面量语法仅允许在变量初始化场景使用(如var v[5]:={...}),无法直接作为函数实参传入。你遇到的ERR238错误正是因为解析器无法识别函数参数位置的向量字面量语法。
目前只能使用你提到的两种方案实现需求,若希望更简洁的写法,可考虑向ExprTK官方提交特性请求,但当前版本没有原生支持的更优写法。
内容的提问来源于stack exchange,提问作者shancock884
相关产品推荐
相关产品推荐

