2013-09-13 3 views
1

У меня есть следующие Matlab «Класс-Design»:MEX/Matlab: Доступ к objectarray, который является членом другого объекта

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

нет прямой функции MEX для извлечения элемента массива объектов. Вы можете написать вспомогательную функцию в MATLAB, чтобы сделать это, и вместо этого вызывать эту функцию из MEX-функции. – Amro

ответ

0

После вызова mxGetProperty, чтобы получить массив объектов, лучше позвонить в MATLAB, чтобы сделать индексацию на этом массиве объектов. Если bar_mx является 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++, вам может потребоваться вызвать функцию subsref. Сделать mexCallMATLAB проще, чем создавать аргумент struct для subsref.

Смежные вопросы