MEX / Matlab:访问objectarray,它是另一个对象的成员

时间:2013-09-13 13:12:14

标签: c matlab oop mex

我有以下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 *)才能调用成员函数。

任何想法如何做到这一点?

由于

1 个答案:

答案 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参数。