从MAT文件读取C应用程序中的自定义类

时间:2019-01-30 23:58:13

标签: c++ matlab matlab-class

我想在C ++独立应用程序的MAT文件中访问自定义MATLAB类的属性。自定义类是在MATLAB中创建的类,如下所示:

classdef customClass
    properties
        myProp
    end

    methods
        function obj = customClass(arg1,arg2)
           obj.myProp = arg1 + arg2
        end
    end
end

此类的实例现在已保存到MAT文件,并且应由独立的C应用程序访问。

显然,MATLAB提供了一个library来读取C应用程序中的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";
}

仔细阅读文档可以发现其局限性: 独立应用程序(例如使用MATLAB引擎API构建的应用程序)不支持mxGetProperty

是否有其他可能性可以从独立的C ++应用程序访问MAT文件中的customClass

1 个答案:

答案 0 :(得分:1)

classdef变量在MATLAB中是不透明的对象,有关属性如何存储在其中的详细信息尚未公开。您必须使用官方的API函数来获取它们(并且mxGetProperty进行深度复制)。所以你被困住了。我的建议是从对象中提取您感兴趣的属性,然后将其保存到mat文件中。