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)
这两种实现方式基本相同吗?我是否应该优先选择另一个?如果是,为什么?
Lambda基本上只是函子的语法糖。它们的主要优点是其密集的语法,您无需指定名称就可以内联定义它们。
在我的项目中,此仿函数在各个地方都使用过。
如果要命名类型并在不同的地方使用它,那么使用lambda与使用functor类相比没有太大的优势。
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |