c++ - C++:模板和 Lambda
问题描述
在 C++ 中使用类似以下的内容是否常见?
template <typename T> function<void(vector<T> &)> filter1 = [ ] (vector<T> &vec){
int count = 0;
for (T t : vec){
if ( t.cost < 500 )
vec.erase(vec.begin()+count);
count++;
}
};
template <typename T> void discount(float p, vector<T> &vec){
filter1<T>(vec);
int count = 0;
for (T t : vec) {
t.cost = t.cost - t.cost * p;
vec.erase(vec.begin() + count);
vec.emplace(vec.begin() + count, t);
count++;
}
顺便说一句,我称它为 tembda,因为它是模板和 Lambda 的混合体。
解决方案
在 C++ 中使用类似以下的内容是否常见?
不。
首先,std::function
这是一种重量级的抽象,在这种情况下会不必要地降低代码的性能。其次,与简单的模板函数相比,在这里使用 lambda 表达式没有任何优势——你只会让阅读你代码的人感到困惑。
推荐阅读
- javascript - 每次在 IM 中发送相同消息的小书签代码
- c# - LastIndexOf 错误?
- gitlab - 无法从 Gitlab 内的 Swagger UI 调用外部 API。内容安全策略错误
- elasticsearch - ElasticSearch - 结合过滤器和复合查询以获得独特的字段组合
- logging - Serilog 没有方法“.ForContext()”
- ssl - 如何在我的 kubernetes 服务中使用证书管理器letsencrypt-prod?
- image-upload - 如何在富文本编辑器中更改图像上传路径?
- python - 使用python将文件下载到虚拟服务器
- model - Epsilon eol 无法识别元模型实体
- ruby-on-rails - Google App Engine 部署耗时超过 20 分钟