C++ “详细信息”和“impl”文件夹的用途是什么?

C++ “详细信息”和“impl”文件夹的用途是什么?,c++,boost,stl,C++,Boost,Stl,在处理STL和boost时,我经常看到名为detail或impl的文件夹。 这些文件夹的用途是什么?你怎么知道什么属于这里 这些只是接口的私有实现吗 这些文件夹的用途是什么 这些只是接口的私有实现吗 基本上,是的。Boost和标准库的实现通常会在这里放置不属于它们公开的公共接口的内容,但需要通过公共接口的实现来访问 你怎么知道什么属于这里 这是一个很难回答的问题,因为它意味着您可以从外部向内看,得出关于这些目录中的内容应该在哪里的结论。您应该将这些目录视为内部没有用户可服务部件的模拟。您可以查看

在处理STL和boost时,我经常看到名为detail或impl的文件夹。 这些文件夹的用途是什么?你怎么知道什么属于这里

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

这些文件夹的用途是什么

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

基本上,是的。Boost和标准库的实现通常会在这里放置不属于它们公开的公共接口的内容,但需要通过公共接口的实现来访问

你怎么知道什么属于这里

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

在应用程序中直接使用这些目录中的头文件是非常令人沮丧的,并且会导致不可移植的代码,即使是轻微的升级也会导致Boost或C++编译器的中断。


话虽如此,你没有理由不在这些目录中探索,看看这些东西是如何在引擎盖下工作的

详细信息文件夹是一种抽象技术,用于将不在模块公共API中的成员移动到子命名空间和子文件夹中,以隐藏开发人员可能不关心的成员,并用于实现私有实现pimpl设计模式;一个助推头赫伯·萨特发明的图案。pimpl模式使用共享对象模型来创建跨平台pimpl,这些pimpl使用.ipp文件和转发声明在boost中实现,从而大大降低了编译器的速度。Piml主要用于处理依赖于硬件和操作系统的设备,这些设备依赖于系统时钟、计时器、锁、线程、图形、音频或自定义硬件等

details文件夹和名称空间应该增加这样的好处:它们使API更干净、更模块化,但是有更干净、更简单、更优雅、符合UML的解决方案,而且PIMPL设计模式存在许多问题,使其不是工程最佳实践。其中一些原因是:

详细文件夹和命名空间结构需要更多的人工和时间来处理。 Piml不符合UML,不能很好地与测试驱动的开发配合使用。 Pimpl大大降低了编译器的速度。 details文件夹和命名空间创建了一个混乱的依赖关系图,其中存在耦合问题。 上述原因增加了软件开发的成本。 编写可移植的跨平台和跨语言代码不需要Pimpl。 拥有一个干净的公共API只是一个设置、命名约定和文件组织问题。
有关为什么不应使用“详细信息”文件夹的详细说明,请参见。

这就是为您提供闪亮的公共界面所需的所有肮脏管道,是的。但是,看看你自己,你猜,而且有人在相互关联中同意,这并不能真正帮助你学到任何东西。当然,如果你想知道如何实现这样的东西,你只需要看看。你应该只担心文档告诉你要担心的头文件。@remyabel:当然,但好奇和询问也没关系。有时候,你确实需要担心它们,就像在一只罕见的虫子的情况下一样,你必须挖掘事物的本质。@Cornstales是真的,但这似乎不是这个问题的本质。@remyabel:也许我们只是以不同的方式阅读,因为这就是我对这个问题的理解。这实际上是有道理的。谢谢你直截了当的回答。