C++11 std::function和std::bind
程序员文章站
2024-03-18 08:46:22
...
#include <iostream>
#include <functional>
using namespace std;
class Foo
{
public:
void memberFunc(double d, int i, int j)
{
cout << d << endl;
cout << i << endl;
cout << j << endl;
}
};
int main()
{
Foo foo;
//一种函数接口转换成另一种函数接口,这个接口可用boost::Function接收
std::function<void (int)> fp = std::bind(&Foo::memberFunc, &foo, 0.5, std::placeholders::_1, 10); //_1, _2为占位符,若绑定的是成员函数&不可省略,普通函数可省略,&foo传递隐含参数,相当于this指针
fp(100); //(&foo)->memberFunc() 指针方式调用
function<void (int, int)> fp2 = bind(&Foo::memberFunc, ref(foo), 0.5, std::placeholders::_1, std::placeholders::_2);
fp2(100, 200); //foo.memberFunc() 引用方式调用
return 0;
}
注:编译时需要加上-std=c++11 否则编译器不识别
https://www.cnblogs.com/jiayayao/p/6139201.html
推荐阅读
-
C++11 std::function和std::bind
-
An Example of Using std::tr1::bind 博客分类: c++ c++
-
cpp const引用和右值引用的区别,std::move(移动语义), std::forward(完美转发)
-
使用了auto后仍然无法识别变量的类型?需要在编译时加入-std=c++11
-
C++11 std::unique_ptr
-
透彻理解C++11新特性:右值引用、std::move、std::forward
-
【浅析C++11】std::function和std::bind
-
-std=gnu++11 与 -std=c++11 两者有哪些区别?
-
Effective Modern C++ 条款23 理解std::move和std::forward
-
std::bind接口与实现