我程序中的类之一使用了一些第三方库。库对象是我类的私有(private)成员:

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

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

这样做的问题-我程序中使用My类的任何其他单元都应配置为包括3p header 。转移到另一种3p将会危及整个构建...
我看到两种解决此问题的方法-一种是使3pObject变为extern,然后将m_Object转换为指针,并在构造函数中对其进行初始化。第二个是创建“接口(interface)”和“工厂”类并导出它们...

您能提出解决该问题的另一种方法吗?

最佳答案

使用“pimpl”成语:

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

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

关于C++ header -接口(interface)和实现细节之间的分隔,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/203823/

10-11 01:08