gpt4 book ai didi

c++ - 如何将方法传递给 qsort?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:06 27 4
gpt4 key购买 nike

有一个包含一些数据的类,它在某个时间点对它们进行排序。我使用 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*)’

那么如何正确地做到这一点呢?

最佳答案

如果必须使用qsort而不是std::sort(推荐),将成员方法声明为static 应该足够了。

关于c++ - 如何将方法传递给 qsort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com