如何使用lambda和std::function邦定其他類成員函數
时间: 2023-10-23 07:37:15 浏览: 53
可以使用lambda表达式和std::bind来绑定其他类成员函数。
Lambda表达式可以方便地定义一个匿名函数,并且可以捕获当前作用域的变量,例如:
```
class MyClass {
public:
void foo(int x) {
// ...
}
};
MyClass obj;
int y = 42;
auto lambda = [&obj, y](int x) {
obj.foo(x + y);
};
lambda(10); // 调用 obj.foo(52)
```
在这个例子中,我们定义了一个Lambda表达式,它捕获了一个MyClass对象和一个整数变量y,并且定义了一个带有一个整数参数的函数。在Lambda表达式中,我们调用了MyClass对象的一个成员函数foo,并传递了一个计算后的参数。
如果要使用std::function来绑定其他类成员函数,可以使用std::bind函数来绑定成员函数和对象实例,例如:
```
class MyClass {
public:
void foo(int x) {
// ...
}
};
MyClass obj;
auto func = std::bind(&MyClass::foo, &obj, std::placeholders::_1);
func(10); // 调用 obj.foo(10)
```
在这个例子中,我们使用std::bind来绑定MyClass对象的成员函数foo和对象实例obj,并且定义了一个带有一个整数参数的std::function对象。在std::function对象中,我们调用了MyClass对象的成员函数foo,并传递了一个参数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)