[英]std::sort functor one line
我已經聲明了函子,並使用該函子作為參數進行了std :: sort調用。 碼:
struct
{
bool operator() (const CString& item1, const CString& item2){
return MyClass::Compare( Order(_T("DESC")), item1, item2);
}
}Comparer;
std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(), Comparer);
一個簡單的問題:我可以一行完成嗎?
如果您的編譯器支持c ++ 11 ,則可以使用lambda
std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
[](const CString& item1, const CString& item2) {
return MyClass::Compare( Order(_T("DESC")), item1, item2);
});
如果沒有c ++ 11 ,則可以通過使用函數而不是函子來將其簡化一點
static inline bool Comparer(const CString& item1, const CString& item2) {
return MyClass::Compare(Order(_T("DESC")), item1, item2);
}
並將其用作最后一個參數。
不幸的是(?),只有一元或二進制函數對象的函數包裝器。 如果也有三元函數對象的包裝器,則可以執行以下操作
std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
std::bind1st(std::ptr_fun(MyClass::Compare), Order(_T("DESC"))));
如果您考慮使用boost-bind ,則可以嘗試使用
std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
boost::bind(MyClass::Compare, Order(_T("DESC")), _1, _2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.