首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MAT-file读取C应用程序中的自定义类

从MAT-file读取C应用程序中的自定义类
EN

Stack Overflow用户
提问于 2019-01-31 07:58:13
回答 1查看 115关注 0票数 1

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

代码语言:javascript
复制
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中显示一个空断言。最小的例子是:

代码语言:javascript
复制
#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的其他可能性?

EN

回答 1

Stack Overflow用户

发布于 2019-01-31 11:42:03

classdef变量在MATLAB中是不透明的对象,并且不会发布有关如何在其中存储属性的详细信息。你必须使用官方的API函数来获取它们( mxGetProperty做了一个深度拷贝)。所以你被卡住了。我的建议是从对象中提取您感兴趣的属性,然后将这些属性保存到mat文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54451410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档