为C++函数编写GNU Octave包装器



我正试图为C++函数编辑一个GNU Octave包装器,以便将其与树莓pi一起使用。在此之前,我对C++或Octave没有任何经验(对python和matlab有经验(,所以我在理解它是如何工作的方面有点困难。

有人已经为C++函数库编写了一个部分GNU Octave包装器,正如你在这里看到的

我想做的是向这个包装器添加额外的函数。例如,我想编辑这里显示的块:

DEFUN_DLD (bcm2835_gpio_fsel, args, nargout,
"-*- texinfo -*-n
@deftypefn  {} bcm2835_gpio_fsel (@var{pin}, @var{mode})n
TDOD: document me!n
@end deftypefn")
{
octave_value_list retval;
int nargin = args.length ();
if (nargin != 2)
print_usage ();
if (! init_ret)
error ("bcm2835 not initialized");
int pin = args(0).int_value();
int mode = args(1).int_value();
bcm2835_gpio_fsel (pin, mode);
return retval;
}

其目的是允许函数bcm2835_gpio_fsel能够接受字符串输入。(您可以在这里看到C++库(我认为我需要更改的部分可能是int mode = args.int_value();到类似string mode = args(1);的部分。

有几件事我很好奇:

  1. 我的上述想法正确吗?(re:接受字符串输入与int输入(
  2. 写在这个代码块顶部的octave_value_list retval;是什么?我读到";用DEFUN_DLD定义的函数的返回类型始终为octave_value_list"但我不太明白这意味着什么。因此,您似乎正在初始化一个名为retval的变量,该变量的类型为octave_value_list。这是某种形式的数组吗?不确定

非常感谢!

我将首先回答问题2:

  1. 什么是octave_value_list retval;写在这个代码块顶部的?我读到";用DEFUN_DLD定义的函数的返回类型始终为octave_value_list"但我不太明白这意味着什么。因此,您似乎正在初始化一个名为retval的变量,该变量的类型为octave_value_list。这是某种形式的数组吗?不确定

octave_value_listoctave_value的列表。octave_value是一种封装将在Octave解释器(命令行界面(中处理的任何内容的类型。所以,当你在Octave时,你会打电话给:

[a, b] = foobar (x, y, z);

函数foobar将接收一个包含三个元素的octave_value_list(octave_value(,并返回一个包含两个参数的octave_value_list

当你打电话时:

a = foobar (x);

然后,函数仍将接收并返回octave_value_lists,每个CCD_11S都有一个元素。

如果您没有查看Octave C++标头,那么最好的选择是查看Octave's doxygen文档。在那里,您可以获得一个几乎完整的octave_value方法列表。

现在,回答你的第一个问题更容易了:

  1. 我的上述想法正确吗?(re:接受字符串输入与int输入(

有点。你是对的,你可以从一个论点中得到一个字符串,但你做得不对。CCD_ 13将失败,因为CCD_。相反,您需要执行std::string mode = args(1).string_value();

最新更新