我想要包裝一些使用結構函數的結構函數的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;
現在,我希望能夠通過的東西來構建結構類似cdef point_3d p1(v, v, v)
(從用Cython文件中) ,但我似乎無法弄清楚如何讓cython只使用提供的構造函數。
我已經試過:
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)
凡v
是一個明確的cdef double v = 0
,但沒有工作。
使用普通cdef point_3d p1
,p1.x = nnnn
等,但這很煩人,我不明白爲什麼我不應該能夠使用默認的構造函數,我認爲。
試圖研究這個問題產生了很多與類構造函數有關的混亂,這沒有幫助。
我不確定我明白你的工作環境能讓你滿意嗎?你仍然需要一個默認的構造函數才能使用。 – DavidW
@DavidW - 是的,你仍然會得到一個構造,構建和移動過程,但實例化爲默認值然後單獨設置成員會更好。 –
我相信Cython可以做構建然後複製賦值/移動賦值:'cdef point_3d p'然後'p = point_3d(...)'。您可能需要告訴它有關默認構造函數以及您使用的構造函數。 – DavidW