構造体をコンストラクタで使用するC++コードをラップしようとしています。直接cythonからC++構造体コンストラクタを呼び出す
C++構造体:
typedef struct point_3d_t
{
double x;
double y;
double z;
point_3d_t(double x, double y, double z)
: x(x)
, y(y)
, z(z)
{}
} point_3d;
Cythonラッパー:
cdef extern from "./cppdar.hpp":
ctypedef struct point_3d:
point_3d(double, double, double)
double x;
double y;
double z;
今、私はは(cythonファイル内から)cdef point_3d p1(v, v, v)
のようなものを経由して、構造体を構築することができるようにを期待しましたしかし、私はCythonに提供されたコンストラクタを使う方法を理解できないようです。
私が試してみた:v
が明示的cdef double v = 0
ですが、どれも仕事
cdef point_3d p1(v, v, v)
cdef point_3d p1 = point_3d(v, v, v)
cdef point_3d p1(0, 0, 0)
cdef point_3d p1 = point_3d(0, 0, 0)
を。
...平野cdef point_3d p1
、p1.x = nnnn
などを使用して、それは迷惑なんだ、と私は、既定のコンストラクタを使用できないようにする必要があり、なぜ私は見ていない、私は思います。
問題を調べようとすると、クラスコンストラクタに関連した多くの混乱が発生しますが、これは役に立たないものです。
:
私はあなたのworkroundがあなたを得ることを理解していませんか?私は思うに、あなたはまだデフォルトのコンストラクタが必要です。 – DavidW
@DavidW - ええ、あなたはまだ構造体を構築して移動することができますが、デフォルトとしてインスタンス化し、メンバーを個別に設定するのが大変です。 –
私はCythonが次に代入/移動代入を作成することができると信じています: 'cdef point_3d p'それから' p = point_3d(...) '。デフォルトコンストラクターと使用するコンストラクターについて、そのことを伝える必要があります。 – DavidW