【C++ 11新特性】 function

原创作品,转载请标明http://blog.csdn.net/xiejingfa/article/details/47040203


std:function 介绍

std:function是C++ 11 中新添加的一个class template。在coco2dx 3.x中广泛使用了std:function模板,比如EventListenerTouchOneByOne中利用该模板实现回调:

    typedef std::function<bool(Touch*, Event*)> ccTouchBeganCallback;
    typedef std::function<void(Touch*, Event*)> ccTouchCallback;

    ccTouchBeganCallback onTouchBegan;
    ccTouchCallback onTouchMoved;
    ccTouchCallback onTouchEnded;
    ccTouchCallback onTouchCancelled;

 
 类模板std:function定义在functional头文件中,是一种通用的多态函数包装器,std:function的实例可以存储、复制、调用任何可调用对象。在C++中,可调用对象包括普通函数、函数指针、Lambda表达式、bind创建的函数以及其它函数对象。std:function是对C++可调用对象的一种类型安全的包装,与函数指针相比,std:function的目标既可以是普通函数,也可以是函数对象和类的成员对象。 
 

怎样使用std:function

1、普通函数

int add(int x, int y)
{
	return x + y;
}

int main()
{
	function<int (int, int)> fun = add;
	cout << fun(1, 9) << endl;  // 输出10
}

2、函数对象

class Num
{
public:
	void operator() (int i)
	{
		cout << "here i = " << i << endl;
	}
};

int main()
{
	Num num;
	function<void (int)> fun = num;
	fun(10);  // 输出 here i = 10
}

3、类的成员函数

class A
{
public:
    int add(int x, int y)
	{
		return x + y;
	}
};

int main()
{
	A a;
	function<int (A &, int, int)> func = &A::add;
	cout << func(a, 1, 9) << endl;
}


详细介绍,可以参考cppreference.com:  http://en.cppreference.com/w/cpp/utility/functional/function


你可能感兴趣的:(C++,function)