天下

记录修行的印记

C++ pimpl 技法

//
pimpl idiom..指向实现的指针

//
pimpl 这种做法还保障了二进制兼容性,让动态库的升级变得更容易。
//隐藏了实现的细节.
//C++代码  
// A.h  

class AImpl;  

class A {  
public:  
    A();  
    
~A();  
    
void func();  

private:  
    A(
const A&);  
    
void operator=(const A&);  
    AImpl
* impl_;  
};  

// A.cpp 

class AImpl {  
public:  
    
void func();  
private:  
    
int  myFunc(int myParam);  
private:  
    int  _myVariable;  
};  

A::A()  
: impl_(
new AImpl)  
{  
}  

A::
~A()  
{  
    delete impl_;  
}  

void A::func()  
{  
    impl_
->func();  
}  


 
// A.h  
//pimplidiom 指向实现的指针
//pimpl 这种做法还保障了二进制兼容性,让动态库的升级变得更容易。
//隐藏了实现的细节.
#pragma once

class A {  
public:  
    A();  
    
~A();  
    
void func();  

private:  
    A(
const A&);  
    
void operator=(const A&);  
    
class AImpl;  // 声明,不是定义  
    AImpl* impl_;
}; 

// A.cpp  
// 在这里定义,完全不暴露  
#include "a.h"
class A::AImpl {  
public:  
    
void func(){
        
    }
private:  
    
int myFunc(int myParam);  
private:  
    
int _myVariable;  
};  

A::A()  
: impl_(
new AImpl)  
{  
}  

A::
~A()  
{  
    delete impl_;  
}  

void A::func()  
{  
    impl_
->func();  
}  

posted on 2011-11-05 17:40 天下 阅读(1025) 评论(0)  编辑 收藏 引用 所属分类: C/C++C++必杀技法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论