我程序中的一个类使用了一些第三方库。 Library对象是我班级的私人成员:
// My.h
#include <3pheader.h>
class My
{
...
private:
3pObject m_object;
}
这个问题 - 我的程序中使用My class的任何其他单元都应配置为包含3p标头。转移到另一种3p将危及整个构建...... 我看到两种方法来解决这个问题 - 一种方法是将3pObject extern转换为m_Object并将其转换为指针,在构造函数中初始化;第二是创建一个“接口”和“工厂”类并导出它们......
你能否提出另一种方法来解决这个问题?
答案 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的所有内部结构都是使用私有实现类完成的 您可以查阅它以获得有关如何正确完成的良好参考。