La soluzione proposta da Rob è ora valida C++ 11 (non necessario per Boost):
void doSort()
{
using namespace std::placeholders;
std::sort(arr, arr+someSize, std::bind(&MyClass::doCompare, this, _1, _2));
}
Infatti, come detto da Klaim, lambda sono un'opzione, un po 'più dettagliato (si deve "ripetere" che gli argomenti sono interi):
void doSort()
{
std::sort(arr, arr+someSize, [this](int l, int r) {return doCompare(l, r); });
}
C++ 14 supporta auto
qui:
void doSort()
{
std::sort(arr, arr+someSize, [this](auto l, auto r) {return doCompare(l, r); });
}
ma ancora, avete dichiarato che gli argomenti sono passati per copia.
Quindi la domanda è "quale è il più efficiente". Questa domanda è stata trattata da Travis Gockel: Lambda vs Bind. Il suo programma di benchmark dà sul mio computer (OS X i7)
Clang 3.5 GCC 4.9
lambda 1001 7000
bind 3716166405 2530142000
bound lambda 2438421993 1700834000
boost bind 2925777511 2529615000
boost bound lambda 2420710412 1683458000
dove lambda
è una lambda utilizzato direttamente, e lambda bound
è una lambda memorizzato in un std::function
.
Quindi sembra che i lambda siano un'opzione migliore, il che non è una sorpresa, dal momento che al compilatore vengono fornite informazioni di livello superiore da cui può trarre profitto.
duplicato esatto di http://stackoverflow.com/q/639100/627163; tuttavia, questo qui è presentato in un modo molto più succinto. – Daniel