头文件

#include <tr1/functional>

语法糖

#define BIND(func, inst) std::tr1::bind(func, inst, std::tr1::placeholders::_1)
#define BIND2(func, inst) std::tr1::bind(func, inst, std::tr1::placeholders::_1, std::tr1::placeholders::_2)

介绍

除了std::tr1::bind,另外有一个boost::bind,这个应该与boost中其他的数据结构结合的很紧。后者好像用的更多。(boost::function和boost::bind已经纳入了std::tr1,所以这两者应该是一样的)
bind使用形式
bind(&f)() 假设f是一个全局函数,绑定全局函数并调用
bind (&A::f, A())() 假设A是一个构造函数为空的类,这个形式绑定了类的成员函数,故第二个参数需要传入一个成员。(成员静态函数除外)
bind (&A::f, _1)(new A()) 同上,效果是一样的,但是使用了占位符,使得没有固定的的对象,推荐

例子

#include <stdio.h>
#include <tr1/functional>

using std::tr1::function;
using std::tr1::bind;

int func(int x,int y) {
printf(“nimei x:%d y:%d\n”, x, y);
return 3;
}
int main() {
printf("%d\n", bind(&func, 3, 4)());
return 0;
}

解释

使用的时候一定要注意指向的是没有this指针的函数(全局函数或静态成员函数),还是有this指针的函数。后面一种必须要用bind()函数。而且要多一个参数
bind(F f, T1 t1, T2 t2, …, TN tN);
具体为:
bind(&要调用的函数,&对象, 要调用函数的参数1,要调用函数的参数2…,_1(bind函数的参数1),_2(bind函数的参数2)…)

如果bind的是一个非静态成员函数,第二个参数一定是一个该成员的一个指针,后面才是正常的参数。
bind中,如果有占位符,那么bind返回的就是相应的参数的函数。比如_1 代表的是int型的参数,那么bind返回的就是void (int),假设绑定的时候返回值为void

如果在一个pool中使用bind,那么相应的函数实现可以在其他地方实现而不在pool类中实现,而在其他类中实现,这样可以保持pool的简洁性。

注意

1.typedef function<void(FrameworkPtr)> FrameworkFunc 这个定义代表FrameworkFunc是一个有一个FrameworkPtr为参数,无返回的函数。
2.“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。
3 如果没有boost::bind,那么boost::function就什么都不是,而有了bind(),“同一个类的不同对象可以delegate给不同的实现,从而实现不同的行为”(myan语),简直就无敌了。

std::tr1::bind使用帮助相关推荐

  1. std::tr1::function and std::tr1::bind

    std::tr1::function and std::tr1::bind 每日一话 一本正经的胡说八道 引言 在C++的TR1中(Technology Report)中包含一个function模板类 ...

  2. vc2010 std::tr1 bind库捉虫记

    前两天发现了VC2010 tr1库中bind实现的一个bug,当时只是作了记录,没有详细分析.但作为一个QA,不找出问题所在实在不算称职,于是就有了这篇捉虫记. 闲言少叙,书归正传,tr1库就不多作介 ...

  3. C++中std::tr1::function和bind 组件的使用

    在C++的TR1中(Technology Report)中包含一个function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类的非静态成员函 ...

  4. c语言prog.c: in function 'main':,C语言 tr1 :: function和tr1 :: bind

    我将以下内容放入Ideone.com(和codepad.org): #include #include #include struct A { A(const std::string& n) ...

  5. C++ std::tr1::shared_ptr使用说明

    1. 介绍 shared_ptr 是通过指针保持某个对象的共享拥有权的智能指针. 若干个 shared_ptr 对象能够拥有同一个对象:最后一个指向该对象的 shared_ptr 被销毁或重置时.该对 ...

  6. std::tr1::function

    转自:https://www.cnblogs.com/qlee/archive/2011/07/04/2097594.html 在C++的TR1中(Technology Report)中包含一个fun ...

  7. 实现函数指针的功能,tr1::bind,tr1::function,virtual函数重载

    直接上例子,参考Effective c++ 和 https://blog.csdn.net/chdhust/article/details/8006601 #include <iostream& ...

  8. 【转】C++ std::tr1::shared_ptr使用

    看<effective c++>,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了. shared_ptr采用引用计数,多个指针可以指向同一个对象:aut ...

  9. C++学习 std::tr1::shared_ptr使用的一点体会tr1库介绍

    Technical Report 1 是一份规范,描述加入C++标准程序的诸多新技能,以新的class templates 和 function templates 形式体现,针对的题目有哈希表,基于 ...

最新文章

  1. 学习C语言必须知道的理论知识(第一章)
  2. Java将视频转为缩略图--ffmpeg
  3. 无竞品可借鉴时,该如何设计产品?
  4. Sql Server Management Studio 18 打开闪退问题
  5. Linux 中的文件压缩与解压
  6. S3C2440扩展SDRAM
  7. 实验 5 编写、调试具有多个段的
  8. MATLAB基础教程(6)——使用matlab求解线性方程组
  9. WCF 第五章 导出并发布元数据(服务行为)
  10. Delphi中的dll操作
  11. LeetCode - 48. Rotate Image
  12. 我们上语文英语音乐计算机和美术英语,“制作课程表”教学设计.ppt
  13. JOI2014Final 飞天鼠
  14. ESP32入门之程序烧录:烧录错误总结
  15. 谷歌浏览器设置启动页被hao123劫持_win10系统打开chrome主页会被hao123劫持的故障原因及解决方法...
  16. CF869A The Artful Expedient 结论题+数论
  17. LeetCode第 21 题:合并两个有序链表(C++)
  18. mysql修行练级之mysql新手入门常用命令
  19. i58400升级可以换什么cpu_为什么明星经常换发型发质还那么好?只要学会这一点,你也可以...
  20. javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?

热门文章

  1. php session传数组,php session存储数组
  2. 苹果a14和骁龙888哪个厉害 苹果a14相当于骁龙多少
  3. mysql spring lobhandler_Spring让LOB数据操作变得简单易行
  4. 最美翻译官(适配器模式)
  5. servicecontroller 无法打开计算机 服务,ServiceController似乎无法停止服务
  6. Django--学生管理系统(django慢更)
  7. Mars3D开发基础学习:相机Camera及视角控制
  8. matlab位移反分析公式,位移反分析.doc
  9. mysql rds 定时执行_如何使用脚本自动备份阿里云rds数据库
  10. 如何防止亚马逊账号被关联?