【C++ 11新特性】 function

来源:互联网 发布:游戏计时器软件 编辑:程序博客网 时间:2024/06/05 02:10

原创作品,转载请标明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


0 0
原创粉丝点击