我有一个 C++ 类,但我也在使用一些低级 C 并且需要使用 bsearch
函数。 bsearch
的最后一个参数是一个比较函数,我想以一种允许它访问类的常量私有(private)变量的方式实现所述函数。
问题是,如果我将比较函数设为成员函数,它将无法工作,因为它不能转换为常规函数指针。如果我创建一个非成员函数,我可以将其传递给 bsearch
,但无法访问该类的私有(private)变量。
怎么办?
3 表示有 3 个元素。16、32、56 是偏移字节。我需要 bsearch 来搜索 Actor 。我在偏移数组中搜索。我需要一个比较函数来比较 Actor ,但我也需要 const void * actorFile 指针来计算比较函数中的位置。actorFIle 是类私有(private)变量。
最佳答案
解决方案是放弃 C 库函数,并按应有的方式使用 C++。 C++标准库也有实用搜索功能,叫做std::lower_bound
.它接受一般的类函数对象,而不仅仅是常规的函数指针。
这允许您使用捕获您的类的 lambda 表达式调用它:
std::lower_bound(start, finish, value, [this] (auto const& lhs, auto const& rhs) {
/* Compare and utilize anything this can point to*/ });
关于c++ - 如何使用 std::bsearch 的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46661168/