我有以下Matlab“Class-Design”:
classdef foo
properties
a;
b;
end
methods
function obj = myFun(obj)
obj.a = 42; // some calculation takes place here
end
end
end
classdef bar
properties
foos; // this is going to be an array of foos
otherStuff;
end
methods
function obj = someFun(obj)
for i = 1:length(foos)
obj.foos(i) = obj.foos(i).myFun;
end
end
end
end
正如我所写,一个对象将有一个其他对象的数组作为其类属性。
我正在尝试将其重写为C代码并将其与MEX一起使用。我现在的问题是:如何访问数组foos的不同元素? 我知道API函数mxGetProperty。使用此函数,我可以访问每个数组条目的属性(例如obj.foos(i).a),但不能访问整个对象(我想要obj.foos(i))。但是,我需要整个对象(作为mxArray *)才能调用成员函数。
任何想法如何做到这一点?
由于
答案 0 :(得分:0)
在调用mxGetProperty获取对象数组后,最好调用MATLAB对这个对象数组进行索引。如果bar_mx是bar对象的mxArray,那么
foos_prop = mxGetProperty(bar_mx, 0, "foos"); // Gives foos property
foos_i = mexCallMATLAB( ... [foos_prop, i]) call MATLAB function to get i'th foo
您可以将调用组合起来获取对象以及调用该对象上的方法。如果要在C ++中进行索引,可能需要调用subsref函数。执行mexCallMATLAB更容易,而不是为subsref创建struct参数。