我应该将lambda或functor用于比较功能吗?

not*_*ien 1 c++ refactoring c++11

我将C ++ 03项目重构为C ++ 11。

我有一个类,其中定义了一个仿函数用于排序:

class Widget
{
public:

  class SortByRules
  {
  public:
    bool operator()(const Widget &lhs, const Widget &rhs) const;
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的项目中,此仿函数在各个地方都使用过。用法示例:

std::vector<Widget> widgets;

// ...

std::sort(widgets.begin(), widgets.end(), Widget::SortByRules());
Run Code Online (Sandbox Code Playgroud)

据我了解,在C ++ 11中应优先使用lambda函数。但是我不确定在这种情况下是否应该坚持使用仿函数,因为我想在整个项目的其他多个类中调用它。

我正在考虑将其重构为以下内容:

// .h
class Widget
{
public:
 Widget();
 std::function<bool(Widget&, Widget&)> SortByRules;
};

// .cpp
Widget::Widget() :
SortByRules([](Widget& lhs, Widget& rhs) { /* ... */ }
{
}
Run Code Online (Sandbox Code Playgroud)

这两种实现方式基本相同吗?我是否应该优先选择另一个?如果是,为什么?

for*_*818 5

Lambda基本上只是函子的语法糖。它们的主要优点是其密集的语法,您无需指定名称就可以内联定义它们。

在我的项目中,此仿函数在各个地方都使用过。

如果要命名类型并在不同的地方使用它,那么使用lambda与使用functor类相比没有太大的优势。