Чтение пользовательского класса в приложении C из файла.mat
Я хочу получить доступ к свойствам пользовательского класса Matlab в файле.mat в автономном приложении C++. Пользовательский класс - это класс, созданный в Matlab с чем-то вроде этого:
classdef customClass
properties
myProp
end
methods
function obj = customClass(arg1,arg2)
obj.myProp = arg1 + arg2
end
end
end
Экземпляр этого класса теперь сохраняется в файле.mat и должен быть доступен для отдельного приложения Си. Очевидно, что Matlab предлагает библиотеку для чтения файлов.mat в приложениях на Си. Это нормально работает для "нормальных" типов, и API, кажется, предлагает функцию mxGetProperty для доступа к пользовательским объектам. Однако, если я попытаюсь выполнить минимальный пример с помощью этой функции, произойдет сбой с пустым утверждением в management.cpp:671. Минимальный пример:
#include <iostream>
#include "mat.h"
int main()
{
MATFile* file = matOpen("test.mat", "r");
if (file == nullptr)
std::cout << "unable to open .mat" << std::endl;
mxArray* customClass = matGetVariable(file, "c");
if (customClass == nullptr)
std::cout << "unable to open tcm" << std::endl;
mxArray* prop = mxGetProperty(customClass, 0, "myProp");
if (prop == nullptr)
std::cout << "unable to access myProp";
}
При более внимательном рассмотрении документации выявляется ограничение: mxGetProperty не поддерживается для автономных приложений, таких как приложения, созданные с помощью API механизма MATLAB.
Есть ли другая возможность доступа к customClass в файле.mat из автономного приложения C++?
1 ответ
Переменные classdef являются непрозрачными объектами в MATLAB, и сведения о том, как в них хранятся свойства, не публикуются. Вы должны использовать официальные функции API, чтобы получить их (и mxGetProperty делает глубокую копию, кстати). Итак, вы застряли. Мой совет - извлечь интересующие вас свойства из объекта, а затем сохранить их в файле mat.