什么是“细节”和“impl”文件夹?

时间:2014-11-05 17:45:23

标签: c++ boost stl

当搞乱STL和提升时,我一直看到名为“detail”或“impl”的文件夹。 这些文件夹的目的是什么?你怎么知道这里有什么?

这些只是接口的私有实现吗?

2 个答案:

答案 0 :(得分:7)

  

这些文件夹的用途是什么?

     

这些只是接口的私有实现吗?

基本上,是的。它的标准库的Boost和实现通常放置的东西不是它们公开的公共接口的一部分,但需要公共接口的实现才能访问。

  

你怎么知道这里有什么?

这是一个难以回答的问题,因为它意味着你可以从外面看到,可以得出这些目录中的东西应该在哪里。您应该将这些目录视为"内部没有用户可维修部件的模拟。"您可以查看并查看,但您永远不知道您可能会发现什么,甚至可以在Boost版本或C ++环境之间进行更改。

强烈建议不要在您的应用程序中直接使用这些目录中的头文件,这将导致不可移植的代码,即使对Boost或C ++编译器进行少量升级也会破坏。

话虽如此,没有理由你无法在这些目录中探索,看看这些内容是如何工作的!

答案 1 :(得分:1)

详细信息文件夹是一种抽象技术,用于将模块公共API中不包含的成员移动到子命名空间和子文件夹中,以隐藏开发人员可能不关心的成员,用于实现私有实现(pimpl)设计模式;一种增强头Herb Sutter发明的模式。 pimpl模式使用共享对象模型来创建跨平台的pimpl,这些pimpl使用.ipp文件在boost中实现(即impl),并且前向声明大大减慢了编译器的速度。 Piml主要用于处理依赖于系统时钟,定时器,锁,线程,图形,音频或自定义硬件等硬件和操作系统相关的设备。

详细信息文件夹和命名空间应该增加它们使API更清洁和更模块化的好处,但是有更清晰,更简单,更优雅,符合UML的解决方案,并且PIMPL设计模式存在许多问题不是工程最佳实践。其中一些原因是:

  • 详细信息文件夹和命名空间结构需要更多的人工和时间。
  • Piml不符合UML,并且不适合测试驱动开发。
  • Pimpl大大降低了编译器的速度。
  • 详细信息文件夹和命名空间会创建一个带有耦合问题的混乱依赖关系图。
  • 上述原因增加了软件开发的成本。
  • Pimpl没有必要编写可移植的跨平台和跨语言代码。
  • 拥有干净的公共API只是doxygen设置,命名约定和文件组织问题。

有关不应使用详细信息文件夹的详细说明,请Kabuki Toolkit Application Framework