我已经声明了一个仿函数并调用了 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));
关于c++ - std::sort 仿函数一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181378/