八度 - 在octave_value_list中访问值

osz*_*d93 1 c++ octave

我在使用Octave C++ API时在C++开发环境中工作.

我想知道在调用函数时如何在返回的octave_value_list中访问单个值.

例如,当我调用时钟函数时,我将返回一个octave_value_list,其中显示以下内容:

2014.0000 8.0000 22.0000 10.0000 1.0000 44.7120

我现在想要访问每个单一的价值,但我不知何故只能得到一年.我错过了一些语法,也许有人可以帮助我.

car*_*aug 5

回答问题的有用文档:


你提到的值是一个多octave_value在一个s octave_value_list,或者是一个值的一个数组octave_value 中的octave_value_list

请注意,单个octave_value值不一定是标量值.它可以是具有n维和多个元素的数组.它可以是struct,struct数组或单元数组.它基本上可以是八度变量可以是的任何东西.例如,电话:

foo ([1 2 3], "string", {678, "other string"}, struct ("over", 9000))
Run Code Online (Sandbox Code Playgroud)

将创建一个octave_value_list4 octave_value秒和:

foo ([1 2 3])
Run Code Online (Sandbox Code Playgroud)

仍然会创造octave_value_list一个单一的octave_value.

你需要的第一件事就是找出你实际拥有的东西.你可以octave_value_list.length()用来获得一个想法,你可以octave_value通过简单地用圆括号对它们进行索引来获得个人信息().

for (int i =0; i < list.length (); i++)
    do_stuff_with (list(i));
Run Code Online (Sandbox Code Playgroud)

一旦你得到了,octave_value你可以尝试转换成很多东西.

std::string   s  = val.string_value ();
bool          b  = val.bool_value ();
boolMatrix    bm = val.bool_matrix_value ();
Cell          c  = val.cell_value ();
NDarray       nd = val.array_value ();
int           i  = val.int_value ();
Array<double> ad = val.vector_value ();
Run Code Online (Sandbox Code Playgroud)

虽然您可以使用其中一种is_x()方法octave_value,但建议检查error_state转换后的值以检查是否出现任何问题.这将提供更自然的Octave体验,并将处理您在Octave中为您预期的不同类型之间的转换.