当我在处理STL和boost时,经常看到名为“detail”或“impl”的文件夹。这些文件夹有什么用?你如何知道哪些内容应该放在此处?
这些文件夹只是接口的私有实现吗?
这些文件夹只是接口的私有实现吗?
details文件夹是一种抽象技术,可将不属于模块公共API的成员移到子命名空间和子文件夹中,以隐藏开发人员可能不关心的成员,并用于实现私有实现(pimpl)设计模式;该模式是由boost主管之一Herb Sutter发明的。 pimpl模式使用共享对象模型创建跨平台的pimpls,这些pimpls在boost中使用.ipp文件和前向声明进行实现(即impl),这会大大减慢编译器的速度。 Piml主要用于处理依赖于诸如系统时钟、定时器、锁、线程、图形、音频或自定义硬件等内容的硬件和操作系统相关设备。
details文件夹和命名空间应该增加了一个好处,使您的API更清洁和模块化,但是还有更干净、更简单、更优雅、符合UML的解决方案,而且PIMPL设计模式存在许多问题,使它不符合最佳工程实践。其中一些原因是:
关于为什么不应该使用详细文件夹的详细解释,请参见Kabuki Toolkit Application Framework。