欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件设计模式

程序员文章站 2024-02-09 15:53:52
...

PIMPL模式

不使用PIMPL编写的代码

// file CFoo 头文件
#include "FooInternalData.h"
#include "Header.h"
class CFoo
{
public:
    CFoo();
    ~CFoo();
    bool ProcessFile(const CString & csFile);
private:
    CFooInternalData    m_data;
    CHeader             m_header;
}
 
 
// file CFoo 源文件
#include "foo.h"
CFoo::CFoo()
{
}

CFoo::~CFoo()
{
}

bool CFoo::ProcessFile(const CString & csFile)
{
    //do something
    return true;
}
 
 
// main file
#include "foo.h"
int main()
{
    CFoo foo;
    foo.ProcessFile("c:\\data.bin");
    return 0;
} 

使用PIMPL模式编写的代码

// file CFoo 头文件 

//here just declare the class PIMPL to compile.
//As I use this class with a pointer, I can use this declaration
class CFoo_pimpl;
class CFoo
{
public:
    CFoo();
    ~CFoo();
    bool ProcessFile(const CString & csFile);
private:
    std::auto_ptr<CFoo_pimpl>    m_pImpl;
} 
 
 
// file CFoo 源文件
#include "FooInternalData.h"
#include "Header.h"
#include "foo.h"
//here defines PIMPl class, because it is use only in this file
class CFoo_pimpl()
{
public:
    CFoo_pimpl()
    {
    }
 
    ~CFoo_pimpl()
    {
    } 
    bool ProcessFile(const CString & csFile)
    {
        //do something
        return true;
    }
};
 
CFoo::CFoo()
:m_pImpl(new CFoo_pimpl())
{
}
 
CFoo::~CFoo()
{
    //do not have to delete, std::auto_ptr is very nice
}
 
bool CFoo::ProcessFile(const CString & csFile)
{
    //just call your PIMPL function ;-)
    return m_pImpl->ProcessFile(csFile);
}
 

// main file 
#include "foo.h"
int main()
{
    CFoo foo;
    foo.ProcessFile("c:\\data.bin");
    return 0;
} 
相关标签: 设计模式 C++