2008-10-15 38 views
5

我的程序中的一个类使用了一些第三方库。图书馆的对象是我的类的私有成员:C++头文件 - 接口和实现细节之间的分离

// My.h 
    #include <3pheader.h> 

    class My 
    { 
    ... 
    private: 
     3pObject m_object; 
    } 

与此问题 - 在我的程序其他单位使用我的类应该被配置为包括3P头。移动到另一种3p将危及整个构建...我看到了两种方法来解决这个问题 - 一个是使3pObject extern并将m_Object转换为指针,在构造函数中初始化;第二是创建一个“界面”和“工厂”类,并将它们导出...

你能否提出另一种解决方法?

回答

11

使用 “平普尔” 成语:

// header 
class My 
{ 
    class impl; 
    std::auto_ptr<impl> _impl; 
}; 

// cpp 
#include <3pheader.h> 
class My::impl 
{ 
    3pObject _object; 
}; 
+0

任何不使用boost :: scoped_ptr的原因? – grigy 2008-10-15 07:02:17

13

私有实现(PIMPL)模式:

http://www.codeproject.com/KB/tips/PIMPL.aspx

基本上,你定义一个类具有指向一个struct,你向前声明。然后,在cpp文件中定义结构,并使用类中的构造函数和析构函数创建/删除PIMPL。

:)

0

所有QT内部结构采用私有实现类来完成。
您可以查看它是如何正确完成的。