Octave -访问octave_value_list中的值

Octave - Accessing Values in octave_value_list

本文关键字:list value 访问 octave Octave      更新时间:2023-10-16

我在使用Octave c++ API时在c++开发环境中工作。

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

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

2014.0000 8.0000 22.0000 10.0000 1.0000 44.7120

我现在想访问每个单独的值,但不知何故,我只能获得年份。我缺少一些语法,也许有人可以帮助我。

回答你问题的有用文档:

  • octave_value_list的氧
  • octave_value的氧

您提到的值是octave_value_list中的多个octave_value s,还是octave_value_list中的单个octave_value中的值数组?

注意,单个octave_value不一定是标量值。它可以是一个n维数组,包含多个元素。它可以是结构体、结构体数组或单元格数组。基本上它可以是任何一个八度变量。例如,调用:

foo ([1 2 3], "string", {678, "other string"}, struct ("over", 9000))

将创建一个包含4个octave_valueoctave_value_list和:

foo ([1 2 3])

仍然会创建一个octave_value_list,但是只有一个octave_value

你需要做的第一件事是弄清楚你实际上拥有什么。你可以使用octave_value_list.length()来获得一个想法,你可以通过简单地用圆括号()索引它们来获得单个octave_value

for (int i =0; i < list.length (); i++)
    do_stuff_with (list(i));

一旦你得到一个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 ();

虽然您可以使用octave_valueis_x()方法之一,但建议在转换后检查error_state的值,以检查是否有任何错误。这将提供一个更自然的Octave体验,并将处理不同类型之间的转换,你期望在Octave为你。