1.boost bind/function

boostbind/function库的出现,替代了stl中的mem_fun,ptr_fun,bind1st,bin2nd等函数
#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace std;
class Foo
{
public:void memberFunc(double d, int i, int j){cout << d << endl;//打印0.5cout << i << endl;//打印100       cout << j << endl;//打印10}
};
int main()
{Foo foo;boost::function<void (int, int)> fp = boost::bind(&Foo::memberFunc, &foo, 0.5, _1, _2);fp(100, 200);boost::function<void (int, int)> fp2 = boost::bind(&Foo::memberFunc, boost::ref(foo), 0.5, _1, _2);fp2(55, 66);return 0;
}

2.Thread类图

3.代码

Thread.h

#ifndef _THREAD_H_
#define _THREAD_H_#include <pthread.h>
#include <boost/function.hpp>class Thread
{
public:typedef boost::function<void ()> ThreadFunc;explicit Thread(const ThreadFunc& func);void Start();void Join();void SetAutoDelete(bool autoDelete);private:static void* ThreadRoutine(void* arg);void Run();ThreadFunc func_;pthread_t threadId_;bool autoDelete_;
};#endif // _THREAD_H_

Thread.cpp

#include "Thread.h"
#include <iostream>
using namespace std;Thread::Thread(const ThreadFunc& func) : func_(func), autoDelete_(false)
{
}void Thread::Start()
{pthread_create(&threadId_, NULL, ThreadRoutine, this);
}void Thread::Join()
{pthread_join(threadId_, NULL);
}void* Thread::ThreadRoutine(void* arg)
{Thread* thread = static_cast<Thread*>(arg);thread->Run();if (thread->autoDelete_)delete thread;return NULL;
}void Thread::SetAutoDelete(bool autoDelete)
{autoDelete_ = autoDelete;
}void Thread::Run()
{func_();
}

Thread_test.cpp

#include "Thread.h"
#include <boost/bind.hpp>
#include <unistd.h>
#include <iostream>
using namespace std;class Foo
{
public:Foo(int count) : count_(count){}void MemberFun(){while (count_--){cout<<"this is a test ..."<<endl;sleep(1);}}void MemberFun2(int x){while (count_--){cout<<"x="<<x<<" this is a test2 ..."<<endl;sleep(1);}}int count_;
};void ThreadFunc()
{cout<<"ThreadFunc ..."<<endl;
}void ThreadFunc2(int count)
{while (count--){cout<<"ThreadFunc2 ..."<<endl;sleep(1);}
}int main(void)
{Thread t1(ThreadFunc);Thread t2(boost::bind(ThreadFunc2, 3));Foo foo(3);Thread t3(boost::bind(&Foo::MemberFun, &foo));Foo foo2(3);Thread t4(boost::bind(&Foo::MemberFun2, &foo2, 1000));t1.Start();t2.Start();t3.Start();t4.Start();t1.Join();t2.Join();t3.Join();t4.Join();return 0;
}

09基于对象编程风格相关推荐

  1. 《Essential C++》读书笔记 之 基于对象编程风格

    <Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...

  2. 面向对象编程风格基于对象编程风格

    本文主要通过实现Thread 类来展现两种编程风格的不同点. 很多人没有区分"面向对象"和"基于对象"两个不同的概念.面向对象的三大特点(封装,继承,多态)缺一 ...

  3. JavaScript基于对象编程

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript基于对象编程 1.JavaScript变量/函数声明在代码执行之前被解析,并且变量声明优先级高于函数声明. ...

  4. C++学习之路: 线程封装(基于对象编程)

    引言: 此次我们重新封装线程, 采用基于对象编程的方式,不用于面向对象编程中重定义虚函数的方式,这里我们用回调函数的方式. Thread.h 1 #ifndef THREAD_H_ 2 #define ...

  5. JavaScript学习总结(九)——Javascript面向(基于)对象编程

    转载自  JavaScript学习总结(九)--Javascript面向(基于)对象编程 一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了 ...

  6. JavaScript学习总结(5)——Javascript面向(基于)对象编程

    一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫"原型对象",因此"类=原型对象" ...

  7. 基于对象和面向对象编程范式辨析和主流编程语言中的应用

    基于对象和面向对象编程范式辨析和主流编程语言中的应用 前言 本文的目的是想告诉大家,为什么C++的模板这么强大.为什么Ruby的Duck Typing(像鸭子那样编程)这么强大! 基于对象和面向对象编 ...

  8. 基于对象的JavaScript编程

    基于对象的JavaScript编程 -JavaScript Object-Oriented Programming By-Ryan Frishberg 接触ajax一直不是很深入,然后对于JavaSc ...

  9. 基于java面对对象编程范式笔记

    https://www.icourse163.org/learn/NJU-1002246017?tid=1002791118#/learn/content 科学思维&工程思维 科学思维:限制条 ...

最新文章

  1. Django模板、配置文件、静态文件及案例实现(创建模板、设置模板查找路径、模板接收视图传入的数据、模板处理数据、BASE_DIR、DEBUG、本地语言与时区、App应用配置)
  2. php数字转英文,PHP金额数字转换成英文
  3. 使用内置的Gallery应用程序选择图形
  4. 21-特征匹配方法(Brute-Force蛮力匹配)
  5. ARM中断返回地址详细分析
  6. WAMP显示错误“MSVCR100.dll”缺少安装时
  7. Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02)
  8. 别乱用了,这才是 SpringBoot 停机的正确方式!!!
  9. 实验1 数字图像处理的MATLAB基础,《数字图像处理(实验部分)》实验1_数字图像处理中MATLAB使用基础...
  10. 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现
  11. em模型补缺失值_EM算法学习(三)
  12. java反编译jar包
  13. 送书 | 别泡枸杞,别晒步数!7招搞懂健康数据,有型有颜等TA来撩
  14. Linux 在线扫描热添加的SCSI设备
  15. 软件测试面试经验之如何测试刷抖音
  16. android 保存图片,并通知相册更新
  17. 建个网站需要多少钱?
  18. SQL2008使用with求余额表,流水账方式
  19. 如何批量删除PDF文件中的页面
  20. 有趣的java代码_求一些有趣的java小程序?

热门文章

  1. 96% 移动恶意软件针对 Android 系统:逾50亿应用可被攻击
  2. jQuery 鼠标拖拽移动窗口
  3. 【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
  4. Ecstore中的微信支付怎么样配置
  5. Android DLNA
  6. Android平台程序崩溃的类型及原因列举
  7. java代码将excel文件中的内容列表转换成JS文件输出
  8. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
  9. matlab-罗曼诺夫斯基准则剔除粗大值
  10. form图片上传遇到错误