Простая математическая экспрессия в ExprTk

Я пытаюсь использовать простое выражение, такое как следующее, и результат должен состоять в том, что значение 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

Ответы

Ответ 1

Посмотрев на примеры, похоже, что операторы if должны иметь форму:

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

Кроме того, назначение использует := вместо =. Поэтому вы должны использовать строку:

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