1

我已经声明了一个仿函数并以该仿函数作为参数进行了 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);

简单的问题:我可以在一行中做到这一点吗?

4

1 回答 1

5

如果您的编译器支持,则可以使用 lambda

std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
          [](const CString& item1, const CString& item2) {
              return MyClass::Compare( Order(_T("DESC")), item1, item2);
          });

没有,你可以通过使用函数而不是仿函数来简化它

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));

这相当于 11 std::bind

于 2013-03-03T01:19:50.870 回答