boost::bind功能强大,可以很好的实现对函数,函数对象之类的进行绑定
下面是一个具体的例子
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <boost/bind.hpp>
using namespace std;
class Person
{
public:
Person(string name)
{
name_ = name;
}
void doit()
{
cout<<"I am "<<name_<<endl;
}
private:
string name_;
};
int main(int argc,char* argv[])
{
vector<Person> p;
p.push_back(Person("Person A"));
p.push_back(Person("Person B"));
p.push_back(Person("Person C"));
cout<<"Using the for loop "<<endl;
for(vector<Person>::iterator iter = p.begin(); iter != p.end(); ++ iter)
{
iter->doit();
}
cout<<"Using for_each algorithm"<<endl;
for_each(p.begin(), p.end(), mem_fun_ref(&Person::doit));
cout<<"Using the bind function"<<endl;
for_each(p.begin(), p.end(), boost::bind(&Person::doit, _1));
return 0;
}
三种方式实现的功能都是一样的,然而下面是其差别:
第一种方式的缺点是效率不是很高,因为其每一次都要计算p.end()
第二种方式就是适应性不是很强,对于非指针情况下使用mem_fun_ref,在于指针情况下使用men_fun,并且其不能够实现对智能指针之类的调用
所以推荐使用第三种方式,对不同类型的情况下调用方式都是一样的
分享到:
相关推荐
今天开机发布程序,启动项目,竟然报错说8080端口被占用,没关系 只要是把占用这个端口的进程杀掉即可
c++11引入了std::bind及std::function,实现了函数的存储和绑定,即先将可调用的对象保存起来,在需要的时候再调用。定义了SignalObject信号类和SlotObject槽类,其中信号类中的 std::function(int)> _call就是要...
在myeclipse中将html文件改成jsp文件时myeclipse卡住;将之前的任务关掉;再打开时多次部署项目的时候报错
算是一个消息处理框架吧,用于说函数对象function与bind的基本用法; 比较适合入门boost的function与bind的基本用法
Linux网络编程:绑定( bind )需要注意的问题, 相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/44057585
NULL 博文链接:https://googlee.iteye.com/blog/1003057
boost stl一些常用函数的使用训练
实现了标准库中的function和bind以及智能指针,linux/windows通用。由于公司GCC版本较老,嵌入式的gcc也无法由我来控制,windows上使用的一些类似智能指针,在linux上无法使用,甚是不爽,于是自己手动写了一份,...
主要介绍了C++ 11 std::function和std::bind使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Maven坐标:jakarta.xml.bind:jakarta.xml.bind-api:2.3.3; 标签:bind、xml、api、jakarta、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
主要介绍了 Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突的相关资料,需要的朋友可以参考下
基本逻辑思考 首先是实现 function,这个比较简单,重载 operator() 就好,这里只实现对函数指针的包装 其次是实现 tuple,这个会比较绕,通过模板取第一个参数,然后用剩下的参数继续生成 tuple并继承,是一种...
大家都知道C++11中增加了许多的新特性,下面在这篇文中我们就来聊一下lambda表达式,闭包,std::function以及std::bind。文中介绍的很详细,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
Maven坐标:jakarta.xml.bind:jakarta.xml.bind-api:2.3.3; 标签:bind、xml、api、jakarta、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...
解决问题关于tomcat的端口异常错误信息
bind-9.9.4-29.el7.x86_64.rpm rhel-server-7.2-x86_64 丢失文件的小伙伴可以下载来补全。。
离线安装包,亲测可用
PDOStatement::bindValue PDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type...