有一个类包含一些数据,它会在某个时间点对它们进行排序。我使用qsort()
并且我想将比较函数作为一种方法保留在类中。问题是如何传递一个方法以qsort()
使编译器(g++)不抛出任何警告?
尝试1:
int Data::compare_records(void * rec_1, void * rec_2){
// [...]
}
void Data::sort(){
qsort(records, count, sizeof(*records), &Data::compare_records);
}
这种方式会产生错误:
error: cannot convert ‘int (Data::*)(const void*, const void*)’ to ‘int (*)(const void*, const void*)’ for argument ‘4’ to ‘void qsort(void*, size_t, size_t, int (*)(const void*, const void*))’
尝试 2:
void Data::sort(){
qsort(
records, count, sizeof(*records),
(int (*)(const void*, const void*)) &Data::compare_records
);
}
这种方式会产生警告:
warning: converting from ‘int (Data::*)(const void*, const void*)’ to ‘int (*)(const void*, const void*)’
那么如何以正确的方式做到这一点呢?