头文件依赖pimpl法
来源:互联网 发布:百马百担c语言报告 编辑:程序博客网 时间:2024/06/08 04:15
头文件依赖,Pimpl法,加速编译
举个例子:
// File: SoundSystem.h
#include "StreamFilter.h"
#include "Emitters."
class SoundSystem {
public:
// ...
private:
StreamFilter currentFilter;
EmitModeConfig modeConfig;
};
一目了然的是,看得出SoundSystem实现使用了StreamFilter和EmitModeConfig的定义,所以#include 了他们的定义在此SoundSystem.h中,可是随着项目的不断推进,class SoundSystem中依赖的使用类型会增多,它的header被引入到其它模块中,不知不觉的编译时间越来越长,改进之:
// File: SoundSystem.h
class StreamFilter;
class EmitModeConfig;
class SoundSystem {
public:
// ...
private:
StreamFilter* currentFilterPtr;
EmitModeConfig* modeConfigPtr;
};
// File: SoundSystem.cpp
#include "StreamFilter.h"
#include "Emitters."
SoundSystem::SoundSystem() {
//...
currentFilterPtr = new StreamFilter;
modeConfigPtr = new EmitModeConfig;
}
SoundSystem::~SoundSystem() {
delete currentFilterPtr;
delete modeConfigPtr;
//...
}
这么一来,把StreamFilter和EmitModeConfig的#include藏到了SoundSystem的实现代码中,以后对SoundSystem的部分改动不会导致其它模块的rebuild哦,不过由此可能会牺牲一点效率吧!
举个例子:
// File: SoundSystem.h
#include "StreamFilter.h"
#include "Emitters."
class SoundSystem {
public:
// ...
private:
StreamFilter currentFilter;
EmitModeConfig modeConfig;
};
一目了然的是,看得出SoundSystem实现使用了StreamFilter和EmitModeConfig的定义,所以#include 了他们的定义在此SoundSystem.h中,可是随着项目的不断推进,class SoundSystem中依赖的使用类型会增多,它的header被引入到其它模块中,不知不觉的编译时间越来越长,改进之:
// File: SoundSystem.h
class StreamFilter;
class EmitModeConfig;
class SoundSystem {
public:
// ...
private:
StreamFilter* currentFilterPtr;
EmitModeConfig* modeConfigPtr;
};
// File: SoundSystem.cpp
#include "StreamFilter.h"
#include "Emitters."
SoundSystem::SoundSystem() {
//...
currentFilterPtr = new StreamFilter;
modeConfigPtr = new EmitModeConfig;
}
SoundSystem::~SoundSystem() {
delete currentFilterPtr;
delete modeConfigPtr;
//...
}
这么一来,把StreamFilter和EmitModeConfig的#include藏到了SoundSystem的实现代码中,以后对SoundSystem的部分改动不会导致其它模块的rebuild哦,不过由此可能会牺牲一点效率吧!
记得,有位微软的C++翘楚人物,Herb Sutter给这种技巧称为Pimpl ( Private Implemention ), 用的恰到好处时,可以提高项目开发速度,同时模块的头文件间的#include关系得以缓解,可以避开循环依赖,而且可以获得一个良好的物理设计。
总结:
Pimpl方法感觉很不错,
使用这个方法的时候,一定要注意的是在这个地方的变化,这个是我第二遍看的时候才注意到的.
class SoundSystem {
public:
// ...
private:
StreamFilter currentFilter;
EmitModeConfig modeConfig;
};
采用Pimpl方法后,变为
class SoundSystem {
public:
// ...
private:
StreamFilter* currentFilterPtr;
EmitModeConfig* modeConfigPtr;
};
所以在.cpp文件中就有了new和delete的操作.
对于这种方法有一个疑问?对于那种存在包含众多类的情况下,这种方法的驾驭不是一般人能够掌握的吧.或许这种方法就不太使用了,不如等待一会,编译.
- 头文件依赖pimpl法
- C++ 代码技巧_头文件依赖,Pimpl法
- 头文件的依赖关系
- 关于头文件的依赖
- 自动添加头文件依赖
- Pimpl idiom,前向声明(forward declaration)与#include头文件
- 自动处理头文件的依赖关系
- 自动处理头文件的依赖关系
- 自动处理头文件的依赖关系
- 头文件的循环依赖问题
- makefile 自动生成头文件依赖关系
- Makefile自动生成头文件依赖
- C++ 头文件顺序和隐含依赖
- C++头文件循环包含依赖
- pimpl
- pimpl
- PIMPL
- pimpl
- ARC指南3 - @property
- [转]Implement a Fog of War – Part 2 – Smooth
- delegate和protocol
- 终于有人能把钱,现实,爱情分析的如此透彻
- sprintf,你知道多少? .
- 头文件依赖pimpl法
- The connection to adb is down, and a severe error has occured.
- 动态加载数据autoComplete
- Tomcat Can't load AMD 64-bit .dll on a IA 32-bit platform
- afinal logo Android的快速开发框架 afinal
- 刺客信条3免uplay破解补丁
- IO中的字符流练习
- tomcat_修改网页标签图标
- java 插入排序