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

Dmi*_*tov 5 c++ coding-style

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

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

    class My 
    {
    ...
    private:
       3pObject m_object;
    }
Run Code Online (Sandbox Code Playgroud)

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

你能建议另一种解决方法吗?

小智 13

私有实施(PIMPL)模式:

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

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

:)


180*_*ION 10

使用"pimpl"成语:

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

// cpp
#include <3pheader.h>
class My::impl
{
  3pObject _object;
};
Run Code Online (Sandbox Code Playgroud)