【问题标题】:Simple Math Expression in ExprTkExprTk 中的简单数学表达式
【发布时间】:2013-09-18 14:54:32
【问题描述】:

我正在尝试使用如下所示的简单表达式,结果应该是 z 的值变为 1。但是似乎没有发生任何关于如何解决此问题的建议?

template<typename t>
void MyTestB()
{

    t x = 1.0;
    t z = 0;

    std::string e = "if((x + 2) == 3){z=1;}";
    exprtk::symbol_table<t> symbol_table;
    symbol_table.add_variable("x",x);
    symbol_table.add_variable("z",z);

    exprtk::expression<t> expression;
    expression.register_symbol_table(symbol_table);


    exprtk::parser<t> parser;

    parser.compile(e,expression);
    t y = expression.value();
    std::cout << z;
}

程序确实在 y = NAN 处结束(这是可以理解的,因为表达式是一个条件语句)但是 z 仍然是 0。我原以为它会变成 1

【问题讨论】:

  • “似乎没有发生任何事情”是一个有点模糊的问题描述。你怎么称呼这个函数?你得到错误的输出或根本没有输出?程序是完成还是挂起?
  • 没有模板也能用吗? (例如将t 修复为int
  • 看看网上的例子,你的字符串看起来应该是这样的:“if((x+2) == 3, z := 1, 0)”。你有没有尝试过这样的事情?
  • @Taylor 是的,成功了。你能把它放在答案中吗

标签: c++ exprtk


【解决方案1】:

查看the examples,似乎if 语句应具有以下形式:

if (condition, expression if true, expression if false)

此外,赋值使用:= 而不仅仅是=。所以你应该使用字符串:

if((x + 2) == 3, z := 1, 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多