Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/SWIG:按索引返回数组_Python_C++_Return Value_Swig - Fatal编程技术网

Python/SWIG:按索引返回数组

Python/SWIG:按索引返回数组,python,c++,return-value,swig,Python,C++,Return Value,Swig,我试图从使用python的SWIG封装的C++函数输出一组值。我知道如何使用以下类型C++返回一个C++数组的简单例子: %apply (double* ARGOUT_ARRAY1, int DIM1) {(double* output_array, int length)}; 与相关C++代码类似: void MyClass::retrieveArray(double* output_array, int length) { for (int i=0; i<length; i+

我试图从使用python的SWIG封装的C++函数输出一组值。我知道如何使用以下类型C++返回一个C++数组的简单例子:

%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* output_array, int length)};

与相关C++代码类似:

void MyClass::retrieveArray(double* output_array, int length) {
    for (int i=0; i<length; i++)
        output_array[i] = _array[i];
}
但是,我想更进一步,使用索引将数组返回到多维数组中。所以C++代码看起来像:

void MyClass::retrieveArray(double* output_array, int length, int index) {
    for (int i=0; i<length; i++)
        output_array[i] = _multi_dimensional_array[index][i];
}

但这似乎不起作用。我还知道在这种情况下返回的数组的大小将是6倍,但我不确定如何将该信息传递给SWIG。

您应该能够应用与以前相同的类型映射:

%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* output_array, int length)};
这将匹配
MyClass::retrieveArray
的参数
double*output\u array
int length
。要从python调用函数,请使用:

output_array = my_class_instance.retrieveArray(length, index)
或者,因为您已经知道长度为6:

output_array = my_class_instance.retrieveArray(6, index)

您也可以修改C++代码,如果您在编译时知道数组的大小:请使用下面的函数签名:

void MyClass::retrieveArray(double output_array[6], int index) {...}
然后使用不同的类型映射:

%apply (double ARGOUT_ARRAY1[6]) {(double output_array[6])};
另请参见,我假设您正在使用

void MyClass::retrieveArray(double output_array[6], int index) {...}
%apply (double ARGOUT_ARRAY1[6]) {(double output_array[6])};