c++ - 我应该使用 lambda 或仿函数进行比较函数吗?
问题描述
我正在将 C++03 项目重构为 C++11。
我有一个类,其中定义了一个用于排序的函子:
class Widget
{
public:
class SortByRules
{
public:
bool operator()(const Widget &lhs, const Widget &rhs) const;
}
}
这个函子在我的项目中的各个地方都使用过。一个示例用法:
std::vector<Widget> widgets;
// ...
std::sort(widgets.begin(), widgets.end(), Widget::SortByRules());
据我了解,在 C++11 中,lambda 应该优于仿函数。但是我不确定在这种情况下我是否应该坚持使用仿函数,因为我想在整个项目中的多个其他类中调用它。
我正在考虑重构为以下内容:
// .h
class Widget
{
public:
Widget();
std::function<bool(Widget&, Widget&)> SortByRules;
};
// .cpp
Widget::Widget() :
SortByRules([](Widget& lhs, Widget& rhs) { /* ... */ }
{
}
这两个实现本质上是一样的吗?我应该更喜欢其中一个吗?如果是,为什么?
解决方案
Lambda 基本上只是函子的语法糖。它们的主要优点是语法密集,您可以内联定义它们而无需给它们命名。
这个函子在我的项目中的各个地方都使用过。
如果您想命名类型并在不同的地方使用它,那么使用 lambda 与使用仿函数类相比没有太大的优势。
推荐阅读
- python - 如何在 Azure 机器学习 Juypyter Notebooks 中安装 python ta-lib 库
- python - 如何更改我的代码以从此列表中绘制表格?
- javascript - url.content 不加载图像 javascript 和 asp.net mvc
- c# - 仅将字典中复杂类型的一些记录序列化为 JSON
- python - 在 Python 中使用 Selenium 确定为什么在列表中的特定位置捕获循环
- github - 如何在 GitHub 上嵌入视频?
- python - 从类中返回一个名为 temperature 的函数并将其打印到另一个文件中
- android - getSnapshots() 不适用于 Firestore 分页适配器
- java - 如何计算当月剩余天数?
- android - 颤振列表视图