13
カスタム比較関数を使用してCythonでqsort
を呼び出そうとしていますが、関数参照を渡す方法がわかりません。Cythonのc関数へのポインタを渡すにはどうすればよいですか?
cdef struct Pair:
int i,j
float h
がh
により、関数の種類を比較します:
cdef Pair[5] pa
for i in range(5):
pa[i].i = i;
pa[i].j = i*2;
pa[i].h = i*.5;
qsort(pa,5,sizeof(Pair),compare)
最後の行は勝った:
cdef int compare(const_void *a, const_void *b):
cdef float v = ((<Pair*>a)).h-((<Pair*>b)).h
if v < 0: return -1
if v > 0: return 1
return 0
これは私がとのトラブルを抱えている部分である第一に、私は構造体を持っています私はコンパイルして、このエラーを生成します。これは、qsort
への参照としてcompare
を渡す方法を理解できないという事実に関連していると信じています。
Cannot assign type 'int (const_void *, const_void *)' to 'int (*)(const_void *, const_void *) nogil'
(http://stackoverflow.com/questions/41944883/verifying-compatibility-in-compiling-extension-types-and-using-them-with-cdef)あなたは洞察力を提供することができます。 – Phillip