当然,std::bind除了绑定函数外,还可以绑定类的成员函数。下面是一个绑定类成员函数的例子:
#include <functional>
#include <iostream>
class A {
public:
A() : m_x(0) {}
void setX(int x) { m_x = x; }
int getX() const { return m_x; }
private:
int m_x;
};
int main() {
A obj;
auto fn1 = std::bind(&A::setX, &obj, 10);
fn1();
auto fn2 = std::bind(&A::getX, &obj);
std::cout << "getX() returns " << fn2() << std::endl;
return 0;
}
在这个例子中,我们首先定义了类 A
,其中有一个成员变量 m_x
和两个成员函数 setX
和 getX
。然后我们创建了一个 A
类型的对象 obj
。
接着我们创建了一个名为 fn1
的可调用对象,将 setX
函数和 obj
绑定在一起,并将参数 10 绑定为 setX
的第一个参数,这样 fn1()
就等同于调用 obj.setX(10)
。
接下来,我们创建了另一个名为 fn2
的可调用对象,将 getX
函数和 obj
绑定在一起,这样 fn2()
就等同于调用 obj.getX()
。
最后,我们输出了 fn2()
的返回值。
通过以上代码,我们可以看到用std::bind 简化了语法,可以非常方便地在类的成员函数中使用 std::bind 来绑定对象指针和成员函数,生成新的可调用对象,这样就可以在以后更加方便地调用了。
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明来自 张拓的博客!