理解 std::function 和 function::bind 的用法

岁数越大越不爱接受新鲜事物,比如 c++ 11

要不是 cocos2dx 3.几的引擎在用 c++11 的特性,可能我永远也不会看.

这篇文章介绍 std::function 和 std::bind 比较清楚,转载如下.

稍微需要注意的是,当成员非静态函数有 2 个参数时候, std::bind 的参数里,需要写成 std::placeholders_1,std::placeholders_2

以此类推。。



function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时。

std::function可以绑定到全局函数/类静态成员函数(类静态成员函数与全局函数没有区别),如果要绑定到类的非静态成员函数,则需要使用std::bind。

#include 
#include 
using namespace std;

typedef std::function fp;
void g_fun()
{
	cout<<"g_fun()"< fpi;
		//对于参数要使用占位符 std::placeholders::_1
		fpi f=std::bind(&A::A_fun_int,this,std::placeholders::_1);
		f(5);
	}
};
int main()
{
	//绑定到全局函数
	fp f2=fp(&g_fun);
	f2();

	//绑定到类静态成员函数
	fp f1=fp(&A::A_fun_static);
	f1();

	A().init();
	A().init2();
	return 0;
}


同时,std::bind绑定到虚函数时会表现出多态行为。

#include 
#include 
using namespace std;

typedef std::function fp;

class A
{
public:
	virtual void f()
	{
		cout<<"A::f()"<init();

	return 0;
}




你可能感兴趣的:(cpp)