#c #octave
Вопрос:
Я знаю, как вызвать функцию, определенную в файле .m, с помощью интерпретатора Октавы и feval
, как показано в руководстве по Октаве, но не знаю, как сделать что-то подобное, используя классы Октавы и их методы.
Если у меня есть простой класс, определенный в Октаве с помощью метода classdef, например
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 , как бы я это сделал. В октаве это было бы:
c = TestClass(); //create an instance of TestClass
c.setval(100); //use the objects methods
c.showval(); //display 100
Решение
Основываясь на ответе ниже, я представлю свое решение здесь. Приведенный выше октавный код может быть переписан следующим образом
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;
}
Ответ №1:
Если вы уже знаете, как вызвать функцию Октавы из C , то все, чего вам не хватает, — это то a.b()
же b(a)
самое, что и . Вызов метода аналогичен вызову функции, здесь нет никакого различия. Октава определяет, какую перегрузку функции вызывать, основываясь на входных аргументах.
Фрагмент кода Октавы, который вы опубликовали,
c = TestClass();
c.setval(100);
c.showval();
также может быть записано как
c = TestClass();
setval(c, 100);
showval(c);