Как я должен передать функцию внутри структуры как функтор? Я предполагал, что это должно работать нормально, но это не так:
#include <algorithm>
using namespace std;
struct s {
int a[10];
bool cmp(int i, int j) {
// return something
}
void init() {
sort(a, a + 10, cmp);
}
};
который получает <unresolved overloaded function type>
Вы не можете сделать это напрямую, потому что cmp
является функцией-членом, которая требует три аргументы: i
, j
и невидимое, неявное this
указатель.
Пройти cmp
в std::sort
, сделайте это статической функцией, которая не принадлежит ни одному конкретному экземпляру s
и, таким образом, не имеет this
указатель:
static bool cmp(int i, int j) {
// return something
}
Если вам нужен доступ к this
можно завернуть cmp
вместо простого функционального объекта:
struct cmp {
s &self;
cmp(s &self) : self(self) { }
bool operator()(int i, int j) {
// return something, using self in the place of this
}
};
И назовите это так:
sort(a, a + 10, cmp(*this));
Пока ответ @Thomas полностью работает, вы можете даже сделать это проще, используя std::bind
или лямбды, как следует:
// Using std::bind
std::sort( a, a + 10, std::bind(&s::cmp, this, _1, _2) );
// Using lambdas
std::sort( a, a + 1, [this](int i, int j) {return this->cmp( i, j );} );