Указание векторного литерала в выражении ExprTKC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Указание векторного литерала в выражении ExprTK

Сообщение Anonymous »

Мне хотелось бы иметь возможность указать векторный литерал в выражении ExprTK для передачи в качестве аргумента функции, но я не смог понять, каков синтаксис и возможно ли это.
Я пытаюсь использовать " all_true({1,1,0,1,1})".... кто-нибудь знает, я использую неправильный синтаксис или это просто невозможно?
Пример код приведен ниже, и я пробую 3 способа:
  • "all_true(y)" => использование переменной вместо литерала, очевидно, работает (y равно double[5 ] и зарегистрировался через add_vector)
  • "all_true({1,1,0,1,1})" => Вот над чем мне хотелось бы работать! ОШИБКА: ERR238 – Ожидается '}' вместо: ','
  • "var v[5]:={1,1,0,1,1};all_true(v)" => работает как обходной путь, но не так аккуратно и интуитивно понятно, как хотелось бы конечным пользователям!
#include "exprtk.hpp"
#include

int main(void) {
typedef exprtk::symbol_table symbol_table_t;
typedef exprtk::expression expression_t;
typedef exprtk::parser parser_t;
typedef exprtk::parser_error::type err_t;

double y[] = { 1, 1, 0, 1, 1 };

exprtk::rtl::vecops::package 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;
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... expression
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»