मैं कस्टम तुलना फ़ंक्शन के साथ साइथन में qsort
पर कॉल करने का प्रयास कर रहा हूं लेकिन मुझे समझ में नहीं आता कि फ़ंक्शन संदर्भ को कैसे पास किया जाए।मैं साइथन में सी फ़ंक्शन में पॉइंटर कैसे पास करूं?
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
इस भाग मैं कुछ समस्या आ रही है पहले, मैं एक struct है इस त्रुटि को संकलित और उत्पन्न नहीं करता है जो मुझे विश्वास है कि इस तथ्य से संबंधित है कि मैं compare
को qsort
के संदर्भ के रूप में कैसे पास कर सकता हूं:
Cannot assign type 'int (const_void *, const_void *)' to 'int (*)(const_void *, const_void *) nogil'
मैं एक [Cython पोस्ट] है (http://stackoverflow.com/questions/41944883/verifying-compatibility-in-compiling-extension-types-and-using-them-with-cdef) आप अंतर्दृष्टि प्रदान करने में सक्षम हो सकते हैं। – Phillip