4
SWIGでC関数をラップしたいと思います。 この関数は、(同じ長さの)2つの配列を入力として取り、さらに3つの配列を返します。 しかし、リターン配列の長さを事前に予測することはできず、これらは関数内で動的に割り当てられます。 SWIG(numpy.iを使用)でそのような関数をラップすることは可能ですか?SWIGが未知の長さ配列を持つNumPy C拡張子
int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny);
場合Nx
とNy
が予めしかしN
(a
とb
の長さ)が知られている関数に(malloc
で)割り当てられていないとa
とb
ある: 簡略化関数宣言は以下のように見えます。
これは排他的にCの質問ですか? Swigは、元の関数をラップしてしまったとしても、C++の 'std :: vector'で解決するのがずっと簡単です。 – Flexo
はい、これは排他的にCの質問です。私はこの問題のためにSWIGをあきらめて、うまく動作するラッパーを手作業で書いた。私は答えを投稿することができますが、私はSWIGを使用しないので、実際にはこの質問に対する答えではありません。 –
その理由からSWIGを放棄する理由はありません。 SWIGのタイプマップ(彼らは地獄のように複雑です)を使わないでください。必要に応じて独自のラッパーを記述し、PyObject *パラメータを返すことができます。 SWIGはそれらを認識しますが、簡単なケース(intなど)を扱います。 – maxy