我程序中的一个类使用了一些第三方库.Library对象是我的类的私有成员:
// My.h #include <3pheader.h> class My { ... private: 3pObject m_object; }
这个问题 - 我的程序中使用My类的任何其他单元都应配置为包含3p标头.移动到另一种3p将危及整个构建...我看到两种方法来解决这个问题 - 一种方法是将3pObject extern转换为m_Object并将其转换为指针,在构造函数中初始化; 第二是创建一个"接口"和"工厂"类并导出它们......
你能建议另一种解决方法吗?
私有实施(PIMPL)模式:
http://www.codeproject.com/KB/tips/PIMPL.aspx
基本上,您定义您的类包含指向您转发声明的结构的指针.然后在cpp文件中定义struct,并使用类中的构造函数和析构函数来创建/删除PIMPL.
:)
使用"pimpl"成语:
// header class My { class impl; std::auto_ptr_impl; }; // cpp #include <3pheader.h> class My::impl { 3pObject _object; };