微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 C++ api 访问八度结构成员

如何解决从 C++ api 访问八度结构成员

我必须创建一个 C++ 程序来使用 Octave C++ API 读取和操作图像。图像采用 .mat 二进制格式。 要以八度读取文件,我使用

S = load("/path/to/file","-mat","house") // house is the var name

S 是标量结构类型。

要在 C++ 中读取文件,我创建了以下函数

namespace oc = octave;

void octave_read(char* file,std::vector<double>& v,const std::string& variable) {
    oc::interpreter inter {};
    try {
        inter.initialize_history (false);
        inter.initialize_load_path (false);
        inter.initialize();
        if (! inter.initialized ()){
            std::cerr << "Octave interpreter initialization Failed!"
            << std::endl;
            exit (1);
        }
        octave_value_list in{};
        in(0) = file;
        in(1) ="-mat";
        in(2) = variable;
        octave_value_list out = Fload(inter,in,1);
        // this should be replaced to get the actual values of the variable
        for (int i = 0; i < out(0).length(); ++i) {
            std::cout<< "got here" <<std::endl;
            std::cout<< out(0).class_name();
        }
    }  catch (const octave::exit_exception& ex){
        std::cerr << "Octave interpreter exited with status = "
                  << ex.exit_status () << std::endl;
    }
    catch (const octave::execution_exception& e)    {
        std::cerr << "error encountered in Octave evaluator!" << std::endl;
        std::cerr << e.info();
    }
}

它利用了 Octave 的内置加载功能。它读取文件并将结果保存到 out 变量,但我无法访问结构的 house 变量成员。我也尝试将 out(0) 转换为 octave_scalar_struct 但仍然没有运气。所以我的问题是如何从 Octave C++ API 访问 out(0) 结构的变量?

编辑: 注意:struct的变量应该是一个double数组

解决方法

您可以使用 subsref 提取变量“house”:

octave_value val = out(0).subsref(".",{ovl("house")});
Matrix mat = val.matrix_value ();

假设 house 是一个矩阵。您可以改为将其作为双值的 N 维数组获取:

NDArray arr = val.array_value ();

其他数据类型也可用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。