std::bind 成员函数
时间: 2023-07-08 22:41:35 浏览: 57
`std::bind` 除了可以绑定普通函数之外,还可以绑定成员函数。当我们使用 `std::bind` 绑定成员函数时,需要使用类成员指针和对象指针来指定要调用的成员函数和对象。
例如,假设我们有一个类 `Person`,并且有一个成员函数 `sayHello`:
```c++
#include <iostream>
class Person {
public:
void sayHello() {
std::cout << "Hello!" << std::endl;
}
};
```
现在我们想要使用 `std::bind` 来创建一个函数对象,用于调用 `Person::sayHello`。我们可以这样做:
```c++
#include <functional>
int main() {
Person p;
auto f = std::bind(&Person::sayHello, &p);
f(); // 输出 Hello!
return 0;
}
```
在上面的例子中,我们使用 `&Person::sayHello` 来获得 `Person` 类的成员函数指针,使用 `&p` 来获得 `Person` 对象的指针,然后使用 `std::bind` 绑定了一个成员函数 `Person::sayHello` 和对象 `p`,并且创建了一个函数对象 `f`,并且调用它,输出了 Hello。
需要注意的是,当我们使用 `std::bind` 绑定成员函数时,需要使用 `&` 符号来获得成员函数指针和对象指针。另外,如果成员函数有参数,我们需要在 `std::bind` 中将参数依次列出。例如:
```c++
#include <iostream>
#include <functional>
class Person {
public:
void sayHello(const std::string& name) {
std::cout << "Hello, " << name << "!" << std::endl;
}
};
int main() {
Person p;
auto f = std::bind(&Person::sayHello, &p, "Alice");
f(); // 输出 Hello, Alice!
return 0;
}
```
在上面的例子中,我们使用 `std::bind` 绑定了一个有参数的成员函数 `Person::sayHello` 和对象 `p`,并且创建了一个函数对象 `f`,并且调用它,输出了 Hello, Alice。