我正试图为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);
的部分。
有几件事我很好奇:
- 我的上述想法正确吗?(re:接受字符串输入与int输入(
- 写在这个代码块顶部的
octave_value_list retval;
是什么?我读到";用DEFUN_DLD定义的函数的返回类型始终为octave_value_list"但我不太明白这意味着什么。因此,您似乎正在初始化一个名为retval的变量,该变量的类型为octave_value_list。这是某种形式的数组吗?不确定
非常感谢!
我将首先回答问题2:
- 什么是octave_value_list retval;写在这个代码块顶部的?我读到";用DEFUN_DLD定义的函数的返回类型始终为octave_value_list"但我不太明白这意味着什么。因此,您似乎正在初始化一个名为retval的变量,该变量的类型为octave_value_list。这是某种形式的数组吗?不确定
octave_value_list
是octave_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_list
s,每个CCD_11S都有一个元素。
如果您没有查看Octave C++标头,那么最好的选择是查看Octave's doxygen文档。在那里,您可以获得一个几乎完整的octave_value
方法列表。
现在,回答你的第一个问题更容易了:
- 我的上述想法正确吗?(re:接受字符串输入与int输入(
有点。你是对的,你可以从一个论点中得到一个字符串,但你做得不对。CCD_ 13将失败,因为CCD_。相反,您需要执行std::string mode = args(1).string_value();