boost::bind 介绍
boost::bind 介绍
这篇文章介绍boost::bind()的用法, 文章的主要内容是参考boost的文档。
1. 目的
boost::bind 是std::bindlist 和 std::bind2nd的结合体。它提供一个任意的函数对象(仿函数)、函数、函数指针、成员函数指针。 它可以绑定任意的参数。bind 没有对函数对象有任何的要求。
2. 把bind()用在函数和函数指针上
有如下代码:
1 void f(int a, int b)
2 {
3 cout << a + b << endl;
4 }
5 void g(int a, int b, int c)
6 {
7 cout << a + b + c << endl;;
8 }
当调用boost::bind(f, 1, 2);的时候, 它会产生一个空的函数对象,这个对象没有参数, 返回 f(1,2).当然我们也可以给它加个参数:
1 int a = 10;
2 boost::bind(f, _1, 5)(a);
3 int x(10),y(20),z(30);
4 boost::bind(g,_1,_2,_3)(x, y, z);
结果:

作为和std::bindlst的对比我们可以看下如下的代码:
1 std::bind1st(std::ptr_fun(f), 5)(x); // f(5, x)
2 boost::bind(f, 5, _1)(x); // f(5, x)
是不是boost::bind()简单多了。
3. 把bind()用在函数对象(仿函数)上
bind()不仅能够用在函数上,而且可以接受任意的函数对象(仿函数)。如:
1 class F
2 {
3 public:
4 int operator()(int a, int b)
5 {
6 cout << a+b <<endl;
7 return a+b;
8 }
9 double operator()(double a, double b)
10 {
11 cout << a+b<< endl;
12 return a +b;
13 }
14 };
15 int _tmain(int argc, _TCHAR* argv[])
16 {
17 F f;
18 int a[] = {1, 2, 3, 4, 5, 6,7};
19 double aDouble[] = {1.1, 2.2, 3.3, 4.4,5.5,6.6,7.7};
20 for_each(a, a+7, boost::bind<int>(f, _1, _1));
21 for_each(aDouble, aDouble+7, boost::bind<double>(f, _1, _1));
22 return 0;
23 }
4. 把bind()用在成员变量和成员函数上
指向成员变量的指针和指向成员函数的指针和仿函数不一样, 因为他们没有提供operater()。boost用它的第一个参数接受类成员的指针,这样就像用boost::mem_fn()把类成员的指针转化为仿函数一样。如:
bind(&X::f, args)
就等于
bind<R>(mem_fn(&X::f), args)//R 是x::f的返回值。
列如:
1 struct X
2 {
3 bool f(int a)
4 {
5 cout << a <<endl;
6 return static_cast<bool>(a);
7 }
8 };
9 int _tmain(int argc, _TCHAR* argv[])
10 {
11 X x;
12 boost::shared_ptr<X> p(new X);
13 int i = 5;
14 boost::bind(&X::f, &x, _1)(i); // (&x)->f(i);
15 boost::bind(&X::f, x, _1)(i); //(copy x).f(i);
16 boost::bind(&X::f, p, _1)(i); //(copy p)->f(i);
17 return 0;
18 }
boost::bind 介绍的更多相关文章
- boost::function和boost::bind 介绍
一. boost::function介绍 原文:http://www.cnblogs.com/sld666666/archive/2010/12/16/1907591.html 本片文章主要介绍boo ...
- (转)boost::bind介绍
转自:http://www.cnblogs.com/sld666666/archive/2010/12/14/1905980.html 这篇文章介绍boost::bind()的用法, 文章的主要内容是 ...
- boost::bind 和 boost::function 基本用法
这是一篇介绍bind和function用法的文章,起因是近来读陈硕的文章,提到用bind和function替代继承,于是就熟悉了下bind和function的用法,都是一些网上都有的知识,记录一下,期 ...
- 手把手教你实现boost::bind
前言 boost::bind操作想必大家都使用过,它特别神奇,能够绑定函数与参数,绑定后能够改变参数数量,并且还可以使用占位符.它可以绑定普通函数也可以绑定类成员函数.好多小伙伴试图看过boost:: ...
- boost::function 介绍
本片文章主要介绍boost::function的用法. boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象. 1. 介绍 Boost.Func ...
- boost asio 学习(二)了解boost::bind
2.了解boost::bind使用boost::bind封装一个函数,考虑以下例子示例2a #include <iostream> #include <boost/bind.hpp& ...
- boost::bind的简单实现
前言 在上一篇blog中简单的实现了boost::function,支持带有2个参数的函数/函数指针,函数对象,函数适配器/bind类,以及带有1个参数的成员函数指针. 本文接着来介绍如何实现一个简单 ...
- 1,Boost -> Bind
#include <boost/bind.hpp> #include <boost/shared_ptr.hpp> #include <iostream> usin ...
- boost::bind
bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind. bind接受的第一个参数必须是一个可调用对象f,包括函 ...
随机推荐
- Tensorflow做阅读理解与完形填空
catalogue . 前言 . 使用的数据集 . 数据预处理 . 训练 . 测试模型运行结果: 进行实际完形填空 0. 前言 开始写这篇文章的时候是晚上12点,突然想到几点新的理解,赶紧记下来.我们 ...
- 面向对象【林老师版】:特性(property)(十六)
一.什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成 ...
- Java Web之Web组件之间的跳转方式
方法有3种: 第一种:请求转发 我们来写两个类,一个是Servlet1一个是Servlet2 package main.com.vae.forward; import javax.servlet.Se ...
- JAVA核心技术I---JAVA基础知识(内部类)
一:内部类概述 (一)定义 内部类(Inner Class)是定义在其他类中或方法中的类,包含内部类的类通常称作Enclosing Class 内部类的功能通常与包含它的类的功能有紧密的关联 内部类的 ...
- HTML 基础知识汇总(一)
头部: <head> <!-- 国际通用编码 --> <meta charset="UTF-8"> <!-- 超链接优化写法,让所有的超链 ...
- oldboy s21day05
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.请将列表中的每个元素通过 "_" 链接起来.'''users = ['李少奇','李 ...
- maven构建项目时硬编码中文乱码问题解决
场景:1. 项目采用maven作为构建工具.2. 前端页面为jsp,由前端团队独立完成,添加编码配置:<%@ page contentType="text/html;charset=u ...
- windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结
本文记录:在PyCharm2016.3.3 中基于Anaconda3 Python3.6版本安装Python for Mysql驱动.尝试了安装Mysql-Connector成功,但是连接数据库时驱动 ...
- VS WebDev.WebServer40
vs2010下有一个WebDev.WebServer40工具,可以直接拿来当服务器用,这样就不用再安装iis了.位置在 C:\Program Files (x86)\Common Files\micr ...
- Extjs 设置GridPanel单元格可选择高兼容写法
网上大部分都是这种 <style type= "text/css" > .x-selectable, .x-selectable * { -moz-user-selec ...