3 つの要素を持つ構造体を返す C++ ヘッダーがあります。Pythonに構造体変数を適切に受け入れさせるにはどうすればよいですか?
これは私がC++関数に持っているものです:
// Function name myfunc
struct velocity
{
std::vector< std::vector<double> > u;
std::vector< std::vector<double> > v;
std::vector< std::vector<double> > w;
};
velocity velo; //Creating object
velo.u = sum(umean,pu);
velo.v = sum(vmean,pv);
velo.w = sum(wmean,pw);
return(velo)
これは、SWIG を使用した後の私の Python 実装です。
import numpy
from myfunc import * # importing C++ myfunc library
My = 100 # Matrix dimensions
Mz = 100
z = myfunc(My,Mz) # Supplying the matrix dimensions to the myfunc library
print(z)
これを実行すると表示されるエラーメッセージ:
<myfunc.velocity; proxy of <Swig Object of type 'velocity *' at 0x2951ae0> >
Pythonが構造体を「そのまま」取るようにするには、SWIGで何らかの形で定義する必要があることを知っています。何か方法はありますか?または、あなたが提案する代替方法はありますか?これが私のSWIGファイルです
%module myfunc
%{
#include "myfunc.h"
%}
%include "std_vector.i"
// Instantiate templates used by example
namespace std {
%template(IntVector) vector<int>;
%template(DoubleVector) vector<double>;
%template(twodvector) std::vector< std::vector<double> >;
}
struct velocity
{
std::vector< std::vector<double> > u;
std::vector< std::vector<double> > v;
std::vector< std::vector<double> > w;
};
%include "myfunc.h"
ここで構造体を宣言したことに注意してください。これは SWIG で正常にコンパイルされますが、実際に C++ 構造体を取得するために Python で使用する方法がわかりません!