注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

Pimpl  

2017-04-10 21:28:19|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Pimpl(pointer to implementation),它的意思是指针指向实现,尽量保证实现不透明。比如我们正在封装API,类似于下面情况:
Header1.h
#include "Header.h"
class Header1
{
public:
Header1();
~Header1();
int GetHeaderValue(Header *ph) const;
private:
int m_nData;
Header m_header;
};

Header1.cpp
Header1::Header1() {}
Header1::~Header1() {}
int GetHeaderValue(Header *ph) const {}

由于Header1.h是对客户开放的头文件,所以我们的细节实现类Header也开放给了客户,因为Header1.h中include了Header.h,否则Header无法在Header1类中使用。一般来说,不在头文件中包含头文件是一个比较好的习惯。我们可以用Pimpl方法来避免这种情况,如下:
Header1.h
class Header;
class Header1
{
public:
Header1();
~Header1();
int GetHeaderValue(Header *ph) const;
private:
int m_nData;
Header *m_pHeader;
};
Header1.cpp
#include "Header.h"
Header1::Header1() {}
Header1::~Header1() {}
int GetHeaderValue(Header *ph) const {}
这样一来,我们就把细节实现类Header放在了.cpp源文件中,从而对客户隐藏细节实现部分。此谓Pimpl方法第一好处。
Pimpl第二好处,可以降低源文件之间的耦合,在大型工程中,头文件会非常多,之间的关联程度也会很复杂。如果现在要对Header.h增加一个member-function,那么,所有包含Header.h头文件的源文件都需要重新编译,包括客户对Header1.h的引用文件,出现这种情况可是客户不愿意看到的
  评论这张
 
阅读(34)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017