09基于对象编程风格
1.boost bind/function
#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基于对象编程风格相关推荐
- 《Essential C++》读书笔记 之 基于对象编程风格
<Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...
- 面向对象编程风格基于对象编程风格
本文主要通过实现Thread 类来展现两种编程风格的不同点. 很多人没有区分"面向对象"和"基于对象"两个不同的概念.面向对象的三大特点(封装,继承,多态)缺一 ...
- JavaScript基于对象编程
2019独角兽企业重金招聘Python工程师标准>>> JavaScript基于对象编程 1.JavaScript变量/函数声明在代码执行之前被解析,并且变量声明优先级高于函数声明. ...
- C++学习之路: 线程封装(基于对象编程)
引言: 此次我们重新封装线程, 采用基于对象编程的方式,不用于面向对象编程中重定义虚函数的方式,这里我们用回调函数的方式. Thread.h 1 #ifndef THREAD_H_ 2 #define ...
- JavaScript学习总结(九)——Javascript面向(基于)对象编程
转载自 JavaScript学习总结(九)--Javascript面向(基于)对象编程 一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了 ...
- JavaScript学习总结(5)——Javascript面向(基于)对象编程
一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫"原型对象",因此"类=原型对象" ...
- 基于对象和面向对象编程范式辨析和主流编程语言中的应用
基于对象和面向对象编程范式辨析和主流编程语言中的应用 前言 本文的目的是想告诉大家,为什么C++的模板这么强大.为什么Ruby的Duck Typing(像鸭子那样编程)这么强大! 基于对象和面向对象编 ...
- 基于对象的JavaScript编程
基于对象的JavaScript编程 -JavaScript Object-Oriented Programming By-Ryan Frishberg 接触ajax一直不是很深入,然后对于JavaSc ...
- 基于java面对对象编程范式笔记
https://www.icourse163.org/learn/NJU-1002246017?tid=1002791118#/learn/content 科学思维&工程思维 科学思维:限制条 ...
最新文章
- Django模板、配置文件、静态文件及案例实现(创建模板、设置模板查找路径、模板接收视图传入的数据、模板处理数据、BASE_DIR、DEBUG、本地语言与时区、App应用配置)
- php数字转英文,PHP金额数字转换成英文
- 使用内置的Gallery应用程序选择图形
- 21-特征匹配方法(Brute-Force蛮力匹配)
- ARM中断返回地址详细分析
- WAMP显示错误“MSVCR100.dll”缺少安装时
- Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02)
- 别乱用了,这才是 SpringBoot 停机的正确方式!!!
- 实验1 数字图像处理的MATLAB基础,《数字图像处理(实验部分)》实验1_数字图像处理中MATLAB使用基础...
- 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现
- em模型补缺失值_EM算法学习(三)
- java反编译jar包
- 送书 | 别泡枸杞,别晒步数!7招搞懂健康数据,有型有颜等TA来撩
- Linux 在线扫描热添加的SCSI设备
- 软件测试面试经验之如何测试刷抖音
- android 保存图片,并通知相册更新
- 建个网站需要多少钱?
- SQL2008使用with求余额表,流水账方式
- 如何批量删除PDF文件中的页面
- 有趣的java代码_求一些有趣的java小程序?
热门文章
- 96% 移动恶意软件针对 Android 系统:逾50亿应用可被攻击
- jQuery 鼠标拖拽移动窗口
- 【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
- Ecstore中的微信支付怎么样配置
- Android DLNA
- Android平台程序崩溃的类型及原因列举
- java代码将excel文件中的内容列表转换成JS文件输出
- 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
- matlab-罗曼诺夫斯基准则剔除粗大值
- form图片上传遇到错误