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

MEX/Matlab:访问另一个对象的成员objectarray,c,matlab,oop,mex,C,Matlab,Oop,Mex,我有以下Matlab类设计: 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; //

我有以下Matlab类设计:

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.foosi.a,但不能访问我希望具有obj.foosi的对象作为一个整体。但是,我需要将整个对象作为mxArray*来调用成员函数

有什么办法吗


谢谢

在调用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

您可以将对第i个对象的调用与对该对象的方法的调用结合起来。如果你想在C++中做索引,你可能需要调用函数。使用mexCallMATLAB而不是为subsref创建struct参数更容易。

没有直接的MEX函数来提取对象数组的元素。您可以在MATLAB中编写一个帮助函数来实现这一点,并从MEX函数中调用此函数。