Boost.Bind的基础使用
来源:互联网 发布:自动播放软件 编辑:程序博客网 时间:2024/05/17 07:28
当我们使用函数时习惯于C函数的格式,即如下形式
resulttype funname( arglist );
返回值类型 函数名( 参数列表 );
在Boost.Function中,我们可以方便的定义定义函数对象。不过在定义用来表示类成员函数的函数对象时
第一个参数是类指针。而且在调用时,要传入一个类实例的指针。这样用起来并不是很方便,因为调用者
要知道类实例。这实际上没有实现解耦。而解耦是我们使用回调或委托设计的一个目标。
为了解决这个问题,我们要使用Boost.Bind库
Boost.Bind是一个函数对象工厂。他用来产生我们需要的函数对象。好了,有了它,你可以在你设计中大
量使用Boost.Function。不用再去定义类成员函数形式的函数对象啦,只用定义普通函数对象。
一个简单的例子
class CExample
{
public:
bool printstr( const std::string &str )
{
std::cout << "CExample::printstr" << str << std::endl;
return true;
}
};
//定义一个函数对象
boost::function< bool ( const std::string& ) > printstr;
//用Boost.Bind创建一个函数对象,赋给printstr
CExample example;
printstr = boost::bind( &CExample::printstr, &example, _1 );
好了,我们创建了一个函数对象,而且调用时不再需要类实例拉。用Boost.Function和Boost.Bind大大
的简化了Command模式的实现。
在上面的例子中有个古怪的对象"_1"。这个叫做站位符,他代表这个位置有个参数,但现在还不知道参
数是什么。_1代表参数列表中的第一个位置上的参数。Boost.Bind一共定义了9个站位符对象。如下
_1,_2,_3,_4,_5,_6,_7,_8,_9。分别代表参数列表中位子。
Boost.Bind产生的函数对象可以直接使用,利用上面的例子。
bool b = boost::bind( &CExample::printstr, &example, _1 )( "Hello World" );
本文转自:http://www.cppblog.com/walkspeed/archive/2007/07/20/28448.html
- Boost.Bind的基础使用
- Boost.Bind的基础使用
- [转]Boost.Bind的基础使用
- 【boost】boost::bind的使用
- boost::bind的使用
- boost bind的使用
- boost bind的使用
- Boost.bind 的使用
- boost::bind的使用
- 使用boost的bind
- boost的bind使用感受
- boost中bind的使用
- boost之bind的使用
- boost中bind的使用
- boost::function/bind 的使用
- boost::function与boost::bind 的使用
- boost::bind的几种使用
- boost库 bind/function的使用
- 参与全国软考调查问卷,赢精彩大奖
- Embedded Linux System 开机流程
- WinXP + openSUSE 卸载openSUSE
- 获得汉字首字母和拼音
- VIM操作指南“大全”附思维图谱便于记忆
- Boost.Bind的基础使用
- 车型识别算法
- VBA分页
- Node.js + NPM + Ubuntu10
- Java线程:新特征-锁
- android设备连接到pc进行应用程序调试
- 『babyt』SD2C2008杂记之非技术部分之第三天
- crm中链接sql开发外部报表的的链接URLcrm技术
- --将一组查询结果按指定分隔符拼接到一个变量中