Octave C ++ API(feval) - 如何将多个参数传递给feval?

时间:2013-01-30 08:47:33

标签: c++ visual-studio-2010 octave

环境:Windows 7 Professional + octave 3.6.2 + Visual C ++

我试图根据教程将octave嵌入到独立的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(value1,value2 ,. ..)而不是gcd([value1,value2,...]),这是在八度音阶3.2.4中得到支持的,所以这就提出了我的主要问题:

如何将多个参数作为单独的值传递给feval,以便我可以通过octave的C ++ API调用gcd(value1,value2,...)等函数?

最终,我需要在GUI应用程序中进行一些图形处理,所以我可能需要在C ++端调用像conv2这样的函数(遗憾的是,还需要多个函数参数)

提前感谢您的任何帮助

2 个答案:

答案 0 :(得分:0)

嗯,我刚刚做了替换:

//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错误。

答案 1 :(得分:0)

事实证明直接传递 octave_value_list 作为输入,而不是使用 octave_value 矩阵转换为 octave_value_list ,工作良好。 (也许 octave_value 是罪魁祸首?)

所以 octave 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;

}