如何解决从 C++ api 访问八度结构成员
我必须创建一个 C++ 程序来使用 Octave C++ API 读取和操作图像。图像采用 .mat 二进制格式。 要以八度读取文件,我使用
S = load("/path/to/file","-mat","house") // house is the var name
和 S
是标量结构类型。
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 举报,一经查实,本站将立刻删除。