La solución propuesta por Rob ahora es válida C++ 11 (sin necesidad de Boost):
void doSort()
{
using namespace std::placeholders;
std::sort(arr, arr+someSize, std::bind(&MyClass::doCompare, this, _1, _2));
}
En efecto, como se ha mencionado por Klaim, lambdas son una opción, un poco más de detalle (que tiene que "repetir" que los argumentos son enteros):
void doSort()
{
std::sort(arr, arr+someSize, [this](int l, int r) {return doCompare(l, r); });
}
C++ 14 soporta auto
aquí:
void doSort()
{
std::sort(arr, arr+someSize, [this](auto l, auto r) {return doCompare(l, r); });
}
pero aún así, declaró que los argumentos se pasan por copia.
Entonces la pregunta es "cuál es la más eficiente". Esa pregunta fue tratada por Travis Gockel: Lambda vs Bind. Su programa de referencia da en mi equipo (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
donde lambda
es un lambda utilizar directamente, y lambda bound
es un lambda almacenado en un std::function
.
Parece ser que las lambdas son una mejor opción, lo que no es una gran sorpresa ya que el compilador cuenta con información de mayor nivel de la que puede obtener ganancias.
Duplicado exacto de http://stackoverflow.com/q/639100/627163; sin embargo, esto aquí se plantea de una manera mucho más sucinta. – Daniel