[英]Wrapping a C++ struct in Cython
我正在嘗試使用以下頭文件Cython包裝用C ++編寫的dll:
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
struct cmplx64
{
float re;
float im;
};
EXTERN_DLL_EXPORT int foo(cmplx64 *arr, int arr_sz);
PXD文件:
cdef extern from "mylib.h":
cdef struct cmplx64:
np.float64_t re
np.float64_t im
int foo(cmplx64 *arr, int arr_sz) except +
PYX文件:
cimport cmylib
import numpy as np
cimport numpy as np
import cython
def foo(np.ndarray[np.complex64_t, ndim=1] arr, int arr_sz):
return cmylib.foo(&arr[0], arr_sz)
我的安裝文件不會出現此問題。
代替struct
定義,我嘗試根據我發現的建議構建一個cppclass
,但是我沒有像現在這樣的方法那樣得到它。
我得到的錯誤消息是:
Cannot assign type 'float complex *' to 'complexFloatStruct *'
我的問題是由於我正在使用的庫的作者定義了一個帶結構的復雜類型,而不是簡單地使用C ++ std
庫中的內置復雜類型。 如果是這樣的話,我就沒有問題了。
但是,我應該能夠使用Cython包裝C ++類或結構似乎是完全合理的。 我已經閱讀了文檔並且幾乎失敗了。 謝謝你的幫助!
一個簡單的演員可能就足夠了,
def foo(np.ndarray[np.complex64_t, ndim=1] arr, int arr_sz):
return cmylib.foo(<cmylib.cmplx64 *>&arr[0], arr_sz)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.