La solution proposée par Rob est maintenant valide C++ 11 (pas besoin de Boost):
void doSort()
{
using namespace std::placeholders;
std::sort(arr, arr+someSize, std::bind(&MyClass::doCompare, this, _1, _2));
}
En effet, comme mentionné par Klaim, lambdas sont une option, un peu plus bavard (vous devez "répéter" que les arguments sont ints):
void doSort()
{
std::sort(arr, arr+someSize, [this](int l, int r) {return doCompare(l, r); });
}
14 C++ prend en charge auto
ici:
void doSort()
{
std::sort(arr, arr+someSize, [this](auto l, auto r) {return doCompare(l, r); });
}
mais encore, vous avez déclaré que les arguments sont passés par copie. Ensuite, la question est "laquelle est la plus efficace". Cette question a été traitée par Travis Gockel: Lambda vs Bind. Son programme de référence donne sur mon ordinateur (OS X Core 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
où lambda
est un lambda utilisé directement, et lambda bound
est un lambda stocké dans un std::function
. Il semble donc que lambdas soit une meilleure option, ce qui n'est pas trop surprenant puisque le compilateur dispose d'informations de niveau supérieur dont il peut tirer profit.
Exemplaire exact de http://stackoverflow.com/q/639100/627163; Cependant, ceci est posé de manière beaucoup plus succincte. – Daniel