いくつかのデータを含むクラスがあり、ある時点でそれらをソートします。を使用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*)’
それではどうやってそれを正しい方法で行うのですか?