如何在C++中实例化Octave的classdef对象并调用其方法
我们已知可通过Octave解释器和feval调用.m文件中定义的函数,操作方法可参考Octave官方手册,但不清楚如何对Octave类及其方法实现同类操作。
现有使用classdef语法定义的简单Octave类示例如下:
classdef TestClass < handle properties val endproperties methods function obj = TestClass() obj.val = 1; endfunction function obj = setval(obj, v) obj.val = v; endfunction function showval(obj) disp(obj.val); endfunction endmethods endclassdef
若想在C++代码中使用该类,类比Octave中如下调用写法:
c = TestClass(); //create an instance of TestClass c.setval(100); //use the objects methods c.showval(); //display 100
解决方案
Octave类方法支持改写为函数式调用形式,无需使用点语法,只需将类实例作为第一个参数传入方法即可,上述代码等价写法如下:
c = TestClass(); setval(c, 100); showval(c);
对应可转换为如下C++代码:
#include <interpreter.h> #include <parse.h> int main() { octave::interpreter interpreter; interpreter.execute(); octave_value_list arg; octave_value c; c = octave::feval("TestClass", arg, 1).xelem(0); arg(0) = c; arg(1) = 100; octave::feval("setval", arg); arg.clear(); arg(0) = c; octave::feval("showval", arg); return 0; }
内容的提问来源于stack exchange,提问作者sbh
相关产品推荐
相关产品推荐

