C++ std::tr1::function使用
来源:互联网 发布:十分钟学会python 编辑:程序博客网 时间:2024/05/18 00:15
1. 介绍
function 是一种通用、多态的函数封装。std::function 的实例可以对任何可以调用的 目标 进行存储、复制、和调用操作,这些目标包括函数、lambda 表达式、绑定表达式、以及其它函数对象等。(c++11起的版本可用)
function(和bind一样)可以实现类似函数指针的功能,却比函数指针更加灵活(体现在占位符上面),尤其是在很多成员调用同一个函数(仅仅是参数类型不同)的时候比较方便。
特点:
- 可以作为函数和成员函数。
- 可做回调函数,取代函数指针。
- 可作为函数的参数,从外部控制函数内部的行为。
2. 示例代码
先看一下下面这块代码:
#include <iostream>#include <tr1/functional>typedef std::tr1::function<void()> HandleEvent;class Animal{public: Animal(){} ~Animal(){} static void Move(){ std::cout<<"I am moving...\n"; }};class Fish: public Animal{public: Fish(){} ~Fish(){} static void Move(){ std::cout<<"I am swimming...\n"; }};int main(){ std::tr1::function<void()> move = &Animal::Move; move(); move = &Fish::Move; move(); return 0;}
Animal类是父类,Fish继承于Animal。测试程序中分别将子类和父类的Move()
函数地址赋值给function的指针。调用的结果如下:
I am moving…
I am swimming…
为了体现function可以作为函数的参数传入,我们再写一个函数加到原来的代码中进行测试:
void Moving(int option, std::tr1::function<void()> move){ if(option & 1 == 0){ //如果option为偶数,则执行Animal类中的Move方法 move = &Animal::Move; } else{ move = &Fish::Move; } move();}int main(){ std::tr1::function<void()> move = &Animal::Move; move(); move = &Fish::Move; move(); std::cout<<"-------------divid line------------\n"; Moving(4,move); return 0;}
测试结果如下:
I am moving…
I am swimming…
————-divid line————
I am moving…
0 0
- std::tr1::function使用
- std::tr1::function使用
- C++ std::tr1::function使用
- std::tr1::function, std::tr1::bind的使用
- std::tr1::bind 或 std::tr1::function使用
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- std::tr1::function
- 使用std::tr1::function对象代替虑函数
- hdu 1072 Nightmare
- [HDU 1011] Starship Troopers 树形dp
- 普通方法求素数与筛法求素数比较
- leetcode_Search a 2D Matrix II
- 简单性能测试函数模板
- C++ std::tr1::function使用
- 关于 RTOS 的选择 (上)
- 机房收费——组合查询的日期和时间的选择实现
- SDNU 1167.花生采摘【NOIP 2004 普及组】【贪心】【8月6】
- Kaggle 机器学习竞赛冠军及优胜者的源代码汇总
- 12170 - Easy Climb(DP+单调队列)
- MCS 最短路#4 SPFA
- Android代码内存优化建议-Android资源篇
- 虚拟机的安装和使用