You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:27:03