Получить данные из emxArray_real_T

Я преобразовал простой код в C++ с помощью кодировщика Matlab. Однако моя главная проблема в том, что я не могу получить результат! Как преобразовать вывод типа emxArray_real_T в массив C++ и распечатать его?


person Sam    schedule 06.10.2015    source источник


Ответы (1)


Интерфейс кода C для динамически размещаемых массивов

В сгенерированном коде MATLAB представляет динамически распределяемые данные как тип структуры, называемый emxArray. Встраиваемая версия MATLAB mxArray, emxArray представляет собой семейство типов данных, специализированных для всех базовых типов. Определение структуры emxArray

typedef struct emxArray_<baseTypedef> {
    <baseType> *data;
    int *size;
    int allocatedSize;
    int numDimensions;
    boolean_T canFreeData; 
} emxArray_<baseTypedef>;

baseTypedef — это предопределенный тип в rtwtypes.h, соответствующий baseType. Например, вот определение для emxArray базового типа double с неизвестными верхними границами:

typedef struct emxArray_real_T {
    double *data;    //<<<<<<<<<<<<<<< RIGHT HERE
    int *size;
    int allocatedSize;
    int numDimensions;
    boolean_T canFreeData; 
} emxArray_real_T;

Предопределенный тип, соответствующий double, — real_T. Дополнительные сведения о соответствии между встроенными типами данных и предопределенными типами см. в rtwtypes.h.

http://www.mathworks.com/help/fixedpoint/ug/c-code-interface-for-unbounded-arrays-and-structure-fields.html?refresh=true

person user3528438    schedule 06.10.2015
comment
Я знаю об этом, но, как я уже сказал, моя главная проблема — это практическое решение (код), которое может дать мне результат. - person Sam; 06.10.2015
comment
@Sam, помогает ли этот ответ для примера выделения emxArray входов и выходов? В этом ответе говорится о копировании из std::vector< std::vector<double> > в emxArray, и вам просто нужно сделать обратное. Помните, что данные в emxArray будут упорядочены по столбцам. - person Ryan Livingston; 07.10.2015
comment
@RyanLivingston: Спасибо за эти ссылки, я видел их раньше и не мог ими воспользоваться! Моя функция просто C = A + B, где A и B — две двумерные матрицы. Как я уже упоминал, я действительно не знаю, как мне извлечь вывод из сгенерированного Matlab кода C++! - person Sam; 07.10.2015