Мне нужно оценивать математическое выражение каждый раз, когда метод вызывается определенной структурой (инвертированное управление). Конечно, компиляция выражения в методе не является опцией, так как этот метод вызывается очень часто и оказывает значительное влияние на производительность. я выбрал exprtk из-за заявленной выдающейся производительности.
Но если я хочу скомпилировать выражение один раз, мне нужно использовать определенную переменную, отличную от той, в которую я на самом деле нахожусь. Затем в теле метода мне нужно переназначить значение.
Я компилирую функцию один раз в конструкторе типа, выполняя вычисления:
M_symbol_table.add_variable("c", *M_arg_c);
M_symbol_table.add_constants();
M_expression.register_symbol_table(M_symbol_table);
if(!M_parser.compile(M_formula, M_expression)) {
printf("Mobility (M) formula compilation error...\n");
}
Назначение происходит в вызываемой функции.
inline double get_M(double c) {
M_arg_c = c;
double value = M_expression.value();
printf("%0.5f\t%0.5f\n",c,value);
return value;
}
Я определенно не эксперт C ++, поэтому я могу упустить что-то очевидное.
Задача ещё не решена.
Других решений пока нет …