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