std::function绑定lambda表达式
时间: 2023-07-21 07:37:52 浏览: 68
可以使用std::function来绑定lambda表达式,例如:
```
#include <iostream>
#include <functional>
int main() {
int y = 42;
std::function<void(int)> func = [y](int x) {
std::cout << "x + y = " << x + y << std::endl;
};
func(10); // 输出 x + y = 52
return 0;
}
```
在这个例子中,我们定义了一个std::function对象,它绑定了一个lambda表达式。这个lambda表达式捕获了一个整数变量y,并且定义了一个带有一个整数参数的函数。在这个lambda表达式中,我们输出了参数x和捕获的变量y的和。最后,我们调用std::function对象,并传递了一个整数参数10,输出了x + y的值。
相关问题
std::function的用法
std::function是C++11标准库中的一个模板类,用于存储可调用对象(如函数、函数指针、lambda表达式、绑定器)。它可以使函数指针、函数对象、以及其他可调用对象具有类似于普通函数的行为。
基本用法:
std::function<返回类型(参数类型列表)> 变量名;
例如:
std::function<int(int, int)> add = [](int x, int y) { return x + y; };
int result = add(3, 4);
您还可以使用std::bind来绑定参数,例如:
std::function<int(int)> addTen = std::bind(add, 10, std::placeholders::_1);
int result = addTen(5);
std::function可以存储任何可调用对象,因此它非常灵活,可以用来实现回调函数、支持函数指针、函数对象和lambda表达式的函数等等。
std::function 举例子
以下是一个使用std::function的示例:
```c++
#include <iostream>
#include <functional>
void foo(int x) {
std::cout << "foo(" << x << ")" << std::endl;
}
class Bar {
public:
void operator()(int x) const {
std::cout << "Bar(" << x << ")" << std::endl;
}
};
void callFunc(std::function<void(int)> func) {
func(42);
}
int main() {
std::function<void(int)> func;
// 将函数指针赋值给std::function对象
func = &foo;
func(10);
// 将函数对象赋值给std::function对象
Bar bar;
func = bar;
func(20);
// 将Lambda表达式赋值给std::function对象
func = [](int x) {
std::cout << "Lambda(" << x << ")" << std::endl;
};
func(30);
// 将std::bind绑定的函数对象赋值给std::function对象
auto boundFunc = std::bind(foo, std::placeholders::_1);
func = boundFunc;
func(40);
// 将std::function对象作为参数传递给其他函数
callFunc(func);
return 0;
}
```
输出结果为:
```
foo(10)
Bar(20)
Lambda(30)
foo(40)
foo(42)
```
可以看到,std::function可以封装不同类型的可调用对象,并且可以像函数指针一样进行赋值、调用和传递。