Решение, предложенное Робом, теперь действует в C ++ 11 (нет необходимости в Boost):
void doSort()
{
using namespace std::placeholders;
std::sort(arr, arr+someSize, std::bind(&MyClass::doCompare, this, _1, _2));
}
Действительно, как упоминал Клаим, лямбды - это вариант, более подробный (вы должны «повторить», что аргументы являются целыми числами):
void doSort()
{
std::sort(arr, arr+someSize, [this](int l, int r) {return doCompare(l, r); });
}
C ++ 14 поддерживает auto
здесь:
void doSort()
{
std::sort(arr, arr+someSize, [this](auto l, auto r) {return doCompare(l, r); });
}
но, тем не менее, вы объявили, что аргументы передаются копией.
Тогда возникает вопрос "какой из них наиболее эффективен". Этот вопрос был рассмотрен Трэвисом Гокелем: Лямбда против Бинда . Его тестовая программа выдает на моем компьютере (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
, где lambda
- лямбда, используемая напрямую, а lambda bound
- лямбда, хранящаяся в std::function
.
Похоже, что лямбды - лучший вариант, что не является сюрпризом, так как компилятору предоставляется информация более высокого уровня, из которой он может получить прибыль.