gpt4 book ai didi

python - 如何使用 operator [] 扩展 python 中的 c++ 类,使用 swig

转载 作者:太空狗 更新时间:2023-10-29 20:40:47 26 4
gpt4 key购买 nike

我有一个简单的 test.h 文件,其中包含我自己的数组类(使用标准 vector 类):

#include <vector>
#include <string>

using namespace std;

class Array1D{
private:
vector<double> data_;
int xsize_;
public:
Array1D(): xsize_(0) {};

// creates vector of size nx and sets each element to t
Array1D(const int& nx, const double& t): xsize_(nx) {
data_.resize(xsize_, t);
}

double& operator()(int i) {return data_[i];}
const double& operator[](int i) const {return data_[i];}

};

我希望能够使用 swig 在 python 中使用 [] 运算符。我当前的 SWIG 接口(interface)文件看起来像

 %module test

%{
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}

%include "std_vector.i"

namespace std{
%template(DoubleVector) vector<double>;
}

%include "test.h"

当我制作模块时,一切运行良好,但是当我实例化 Array1D 的对象时,a = test.Array1D(10,2),它创建一个长度为 10 的 vector ,每个元素中有 2 个,然后键入 a[1 ] 我明白了TypeError: 'Array1D' 对象不支持索引

为了扩展运算符方法,我的 SWIG 接口(interface)文件应该如何显示,以便我可以在 python 中正确输出 a[1]?我也希望能够做类似 a[1] = 3.0; 的事情。

最佳答案

我想通了。这是我需要添加到我的界面文件中的内容:

%extend Array1D{
const double& __getitem__(int i) {
return (*self)[i];
}
}

关于python - 如何使用 operator [] 扩展 python 中的 c++ 类,使用 swig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com