Visual Studio 2010 — API Cave Octave C ++ (feval) — как передать несколько параметров в feval?

Среда: Windows 7 Professional + октава 3.6.2 + Visual C ++

Я пытался встроить октаву в отдельную программу C ++ в соответствии с руководством:

http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

Мне удалось запустить первую программу без проблем, но вторая выдает сообщение об ошибке.

Упрощенная версия второй программы:

int main (void)
{
string_vector argv (2);
argv(0) = "embedded";
argv(1) = "-q";
octave_main (2, argv.c_str_vec(), 1);

Matrix a_matrix = Matrix (1, 2);
std::cout << "GCD of [12, 16] is ";a_matrix(0)=12;
a_matrix(1)=16;

octave_value_list in = octave_value (a_matrix);
octave_value_list out = feval ("gcd", in, 1);

std::cout<<out(0).matrix_value()<<std::endl;
return 0;

}

строка с «feval» не выполнена. Причина в том, что в октаве 3.6.2, функция gcd больше не принимает список значений в качестве параметра, нужно позвонить gcd (значение1, значение2, …) вместо gcd ([value1, value2, …]), который был поддержан еще в октаве 3.2.4, поэтому здесь возникает моя главная проблема:

Как я могу передать несколько параметров в feval как отдельные значения, чтобы я мог вызывать такие функции, как gcd (value1, value2, …) через C ++ API в octave?

В конечном счете, мне нужно выполнить некоторую обработку графики в приложении с графическим интерфейсом, поэтому мне может потребоваться вызвать такие функции, как conv2 на стороне C ++ (что, к сожалению, также требует нескольких параметров функции)

Спасибо заранее за любую помощь

1

Решение

Ну, я только что сделал замену ниже:

//octave_value_list in = octave_value (a_matrix);
octave_value_list in;
for (octave_idx_type i = 0; i < n; i++)
in(i) = a_matrix (i);

это работает … но я получаю jre ошибку.

0

Другие решения

Оказывается, прямо проезжая octave_value_list в качестве ввода вместо преобразования матрица в octave_value_list с octave_value, работает отлично. (Может быть, octave_value виновник?)

Так что рабочий код под октава 3.6.2 это так:

int main (void)
{
string_vector argv (2);
argv(0) = "embedded";
argv(1) = "-q";
octave_main (2, argv.c_str_vec(), 1);

std::cout << "GCD of [12, 16] is ";

// Use octave_value_list directly as input
octave_value_list in(2);
in(0)=12;
in(1)=16;

octave_value_list out = feval ("gcd", in, 1);

std::cout<<out(0).int_value()<<std::endl;
return 0;

}
0

По вопросам рекламы [email protected]