C ++标头 - 接口和实现细节之间的分离

时间:2008-10-15 05:49:24

标签: c++ coding-style

我程序中的一个类使用了一些第三方库。 Library对象是我班级的私人成员:

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

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

这个问题 - 我的程序中使用My class的任何其他单元都应配置为包含3p标头。转移到另一种3p将危及整个构建...... 我看到两种方法来解决这个问题 - 一种方法是将3pObject extern转换为m_Object并将其转换为指针,在构造函数中初始化;第二是创建一个“接口”和“工厂”类并导出它们......

你能否提出另一种方法来解决这个问题?

3 个答案:

答案 0 :(得分:13)

私有实施(PIMPL)模式:

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

基本上,您定义您的类包含指向您转发声明的结构的指针。然后在cpp文件中定义struct,并使用类中的构造函数和析构函数来创建/删除PIMPL。

:)

答案 1 :(得分:11)

使用“pimpl”成语:

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

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

答案 2 :(得分:0)

QT的所有内部结构都是使用私有实现类完成的 您可以查阅它以获得有关如何正确完成的良好参考。