c++中模板函数与lambda表达式如何结合使用
时间: 2023-12-09 16:02:57 浏览: 126
C++11中值得关注的几大变化
在 C++ 中,可以将 Lambda 表达式作为参数传递给模板函数。Lambda 表达式可以在模板函数中使用,就像其他函数对象一样。
下面是一个示例,展示了如何将 Lambda 表达式作为参数传递给模板函数:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T, typename F>
void filter(std::vector<T>& vec, F&& f) {
vec.erase(std::remove_if(vec.begin(), vec.end(), std::forward<F>(f)), vec.end());
}
int main() {
std::vector<int> vec { 1, 2, 3, 4, 5, 6 };
filter(vec, [](const int& i) { return i % 2 == 0; });
for (const auto& i : vec) {
std::cout << i << " ";
}
return 0;
}
```
在这个例子中,`filter` 函数接受一个 `std::vector` 和一个可调用对象 `f`,它使用 `std::remove_if` 算法将所有符合 `f` 返回 `true` 的元素从向量中删除。在 `main` 函数中,我们使用 Lambda 表达式 `[](const int& i) { return i % 2 == 0; }` 作为 `filter` 函数的第二个参数,这个 Lambda 表达式用于过滤掉所有偶数。
需要注意的是,在模板函数中使用 Lambda 表达式时,需要使用 `std::forward` 将 Lambda 表达式转发给 `std::remove_if` 函数,以保持参数类型的完整性。
阅读全文