调用 Octave 内置函数从C++中获取 2 个参数

Calling Octave built-in function taking 2 arguments from C++

本文关键字:获取 参数 C++ Octave 内置 函数 调用      更新时间:2023-10-16

我在运行以下代码时遇到段错误。调用一个 Octave 内置函数需要 1 个参数就可以正常工作,例如 Fsize。但是对于 2 个参数中的任何一个,我都会得到一个段错误。我尝试过Frdivide和Fplus。

#include <octave/oct.h>
#include <octave/builtin-defun-decls.h>
int main() {
  octave_value_list args;
  octave_value_list res;
  Matrix l(3,1,1.0);
  Matrix r(3,1,1.0);
  args(0) = l;
  args(1) = r;
  res = Fplus(args); // BOOM !!!

}

似乎必须初始化解释器,甚至认为 Octave 文档表明这对于内置的 Octave 函数不是必需的。以下代码有效:

#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/builtin-defun-decls.h>
#include <octave/toplev.h>
int main() {
  string_vector argv(2);
  argv(0) = "embedded";
  argv(1) = "-q";
  octave_main(2, argv.c_str_vec(), 1);
  octave_value_list args;
  octave_value_list res;
  Matrix l(3,1,1.0);
  Matrix r(3,1,1.0);
  args(0) = l;
  args(1) = r;
  res = Fplus(args);
  std::cout << res(0).matrix_value();
  clean_up_and_exit(0);
}