Is it possible to get the returned strings from an Exprtk expression? The code below returns NaN as answer, which is to be expected. But getting the string, in this case 'One', only seems possible using a return[] statement or by using an explicit string variable. But a simple std::string expression->value_() would be a great help. Stepping through the code shows a control_block_ with a string value_ private property with the correct result. But how is it accessible?
In the code there are two strings to evaluate, but both show the identical behavior.
Thanks for any thoughts. ...
#include "exprtk.hpp"
int main()
{
typedef exprtk::symbol_table<double> symbol_table_t;
typedef exprtk::expression<double> expression_t;
typedef exprtk::parser<double> parser_t;
const std::string expression_string =
//"if (1 > 0) {'One';} else {'Two';}";
"if (1 > 0,'One','Two')";
expression_t expression;
parser_t parser;
if (parser.compile(expression_string, expression))
{
double result = expression.value();
// How can the string result be retrieved at this point?
}
return 0;
}
...
The exprtk::results_context has the following helper methods:
bool get_scalar(const std::size_t& index, T& out)bool get_string(const std::size_t& index, std::string& out)bool get_vector(const std::size_t& index, std::vector<T>& out)These methods allow for easy access to the return values based on their index in the sequence of the activated return call.
#include <cstdio>
#include <string>
#include "exprtk.hpp"
int main()
{
using symbol_table_t = exprtk::symbol_table<double>;
using expression_t = exprtk::expression<double>;
using parser_t = exprtk::parser<double>;
using results_context_t = exprtk::results_context<double>;
const std::string expression_string =
" if (1 > 0) "
" return ['One']; "
" else "
" return ['Two']; ";
expression_t expression;
parser_t parser;
if (!parser.compile(expression_string, expression))
{
printf("ERROR: Invalid expression: %s\n",expression_string.c_str());
return 1;
}
expression.value();
const results_context_t& results = expression.results();
std::string str_output;
if (results.get_string(0,str_output))
{
printf("output string: %s\n",str_output.c_str());
}
else
{
printf("ERROR: Failed to extract string return value!\n");
}
return 0;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With