我想在C++独立应用程序的MAT文件中访问自定义MATLAB类的属性。自定义类是在MATLAB中创建的类,如下所示:
classdef customClass
properties
myProp
end
methods
function obj = customClass(arg1,arg2)
obj.myProp = arg1 + arg2
end
end
end这个类的一个实例现在被保存到一个MAT-file中,并且应该可以由一个独立的C应用程序访问。
显然,MATLAB提供了一个在C应用程序中读取MAT文件的library。这对于“普通”类型工作得很好,而且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,例如使用MATLAB engine API构建的应用程序。
是否存在从独立C++应用程序访问MAT文件中的customClass的其他可能性?
发布于 2019-01-31 11:42:03
classdef变量在MATLAB中是不透明的对象,并且不会发布有关如何在其中存储属性的详细信息。你必须使用官方的API函数来获取它们( mxGetProperty做了一个深度拷贝)。所以你被卡住了。我的建议是从对象中提取您感兴趣的属性,然后将这些属性保存到mat文件中。
https://stackoverflow.com/questions/54451410
复制相似问题