boost:function
来源:互联网 发布:c语言 戏说关键字 ppt 编辑:程序博客网 时间:2024/05/01 15:54
1. 介绍
使用function时,可以通过empty函数或与0比较来判断其是否指向一个有效的函数。如果function没有指向一个有效的函数,调用时会抛出bad_function_call的异常。function的clear函数可以使其不再关联到一个函数或函数对象,如果该function本身就是空的,调用该函数也不会带来任何问题。
http://blog.csdn.net/huang_xw/article/details/8249278
Boost.Function库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的特性但是又包含了一个调用的接口。一个函数指针能够在能以地方被调用或者作为一个回调函数。boost.function能够代替函数指针并提供更大的灵活性。
Boost库的function是一组函数对象包装类的模板,实现了一个泛型的回调机制。Boost库的function与函数指针相比,优点在于,它允许用户在目标的实现上拥有更大的弹性,即目标函数既可以是普通函数(自由函数),也可以是函数对象和类成员函数,而且可以给函数添加状态。
2. 使用使用Boost库的function,可以很好地与现有代码融合在一起。另外,function还可以与Boost库的bind和lambda配合使用,从而极大地扩展了function的适用范围。function库支持的函数参数个数最多为10个,其头文件为function.hpp或functionX.hpp(其中,X为0~10之间的整数。)如果你的程序中只使用了X个参数的function,那么你可以只包含对应的functionX.hpp,当然你也可以只包括function.hpp(它包含了所有的function.hpp)。
Boost.Function有两种形式:boost::function<float(int x, int y)>f,其中第一个模板参数是返回值类型,后两个为参数类型。
使用类型: 普通函数, 成员函数, 函数对象。使用function时,可以通过empty函数或与0比较来判断其是否指向一个有效的函数。如果function没有指向一个有效的函数,调用时会抛出bad_function_call的异常。function的clear函数可以使其不再关联到一个函数或函数对象,如果该function本身就是空的,调用该函数也不会带来任何问题。
3.例子
#include <iostream>#include <algorithm>#include <assert.h>#include <boost/bind/bind.hpp>#include <boost/shared_ptr.hpp>#include <boost/function.hpp>using namespace std;int fsum(int i, int j){return i + j;}class Person{public:void operator() (std::string name, int age){std::cout << name << ": " << age << std::endl;}};class Car{public:Car(){}virtual ~Car(){}void info(int i){std::cout << "info = " << i << std::endl;}};void test_function(){// 1. 普通函数boost::function<int(int, int)> func1;func1 = fsum;std::cout << "4 + 5 = " << func1(4, 5) << std::endl;// 2. 函数对象boost::function<void(std::string, int)> func2;Person person;func2 = person;func2("myname", 30);// 3. 成员函数boost::function<void(Car*, int)> func3;func3 = &Car::info;Car car;func3(&car, 25);// 4. 空函数boost::function<int(int, int)> func4;assert(func4.empty());assert(!func1.empty());func1.clear();assert(func1.empty());try{func1(4, 5);}catch (std::exception& e){std::cout << e.what() << std::endl;}}int main(){test_function();system("pause");return 0;}
http://blog.csdn.net/huang_xw/article/details/8249278
0 0
- boost::function
- Boost.Function
- boost::function
- boost:function
- boost::function
- boost::function
- Boost.Function
- boost::function<>
- boost::function
- 【Boost】boost::function介绍
- boost::bind\boost::function
- 【Boost】boost::function介绍
- 【Boost】boost::function介绍
- 【Boost】boost::function介绍
- 【Boost】boost::function介绍
- boost::bind/boost::function
- boost::function和boost::bind
- boost::function 和boost::bind
- Android之RecyclerView之空数据提示
- 最简单实用的MongoDB安装教程:在CentOS中使用 yum 安装MongoDB及服务器端配置详解
- ssh关闭后仍保持当前运行的进程
- 专访腾讯徐汉彬:日请求高达3.5亿+平台的架构设计及演变
- fl2440开发板hello world模块驱动编写
- boost:function
- 文章标题js一些方法的总结
- Windows安装Theano
- Android多媒体—音频技术
- 虚函数在对象中的内存布局
- JDBC-查询操作
- Linux 对VIM的一些格式设置
- C++类内存分布
- J2EE后台response通过alert显示消息