Rob提出的解決方案現在可用於C++ 11(不需要Boost):
void doSort()
{
using namespace std::placeholders;
std::sort(arr, arr+someSize, std::bind(&MyClass::doCompare, this, _1, _2));
}
事實上,正如KLAIM提到,lambda表達式是一種選擇,更詳細一點(你有 「重複」 的參數是整數):
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); });
}
但您仍然聲明參數是通過複製傳遞的。
然後問題是「哪一個最有效率」。 Travis Gockel對此問題進行了處理:Lambda vs Bind。他的基準測試程序在我的電腦上給(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直接使用,並且lambda bound
是存儲在一個std::function
拉姆達。
所以看來lambda是一個更好的選擇,這並不令人驚訝,因爲編譯器提供了更高級別的信息,可以從中獲利。
確切的重複http://stackoverflow.com/q/639100/627163;然而,這裏以更簡潔的方式提出。 – Daniel 2012-11-23 20:03:39