如何在 C++ 中实例化 Octave classdef 对象并调用其方法
How to instantiate an Octave classdef object in C++ and call its methods
我知道如何使用 Octave 解释器和 feval
调用 .m 文件中定义的函数,如图 in the Octave manual 但不知道如何使用 Octave class es 及其方法。
如果我使用 classdef 方法在 Octave 中定义了一个简单的 class,例如
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++ 代码中使用我的 class,我将如何去做。在 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;
}
如果您已经知道如何从 C++ 调用 Octave 函数,那么您所缺少的只是 a.b()
与 b(a)
相同。调用方法就像调用函数一样,没有区别。 Octave 根据输入参数找出要调用的函数重载。
您发布的 Octave 代码位,
c = TestClass();
c.setval(100);
c.showval();
也可以写成
c = TestClass();
setval(c, 100);
showval(c);
我知道如何使用 Octave 解释器和 feval
调用 .m 文件中定义的函数,如图 in the Octave manual 但不知道如何使用 Octave class es 及其方法。
如果我使用 classdef 方法在 Octave 中定义了一个简单的 class,例如
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++ 代码中使用我的 class,我将如何去做。在 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;
}
如果您已经知道如何从 C++ 调用 Octave 函数,那么您所缺少的只是 a.b()
与 b(a)
相同。调用方法就像调用函数一样,没有区别。 Octave 根据输入参数找出要调用的函数重载。
您发布的 Octave 代码位,
c = TestClass();
c.setval(100);
c.showval();
也可以写成
c = TestClass();
setval(c, 100);
showval(c);