Sea*_*hot 3 c++ design-patterns
关于布局C++头文件和源文件的设计原则,我有一些疑问:我最近接手了一个项目,前面的程序员曾经有过这个,这特别令人烦恼,因为我读到了一个我们不应该包含的地方.hpp文件中的.cpp文件(预处理器只会将.cpp文件复制并粘贴到.hpp中)
Q1.在.hpp文件中包含.cpp文件是不是很糟糕?为什么?
由于上面的问题,当我在eclipse中加载程序时,我面临许多"多个声明"错误,即使我在所有.hpp文件中添加了标题保护.
Q2.我是否应该在.cpp文件中包含标题保护?我也尝试过后来但无济于事.有什么建议吗?
Q3.如果我的.cpp文件中有两个或更多需要使用相同的头文件,那么包含所有这些头文件的最佳方法是什么?我应该创建一个新的头文件,例如h1.hpp,在这些.或更多.cpp文件中包含我需要的所有头文件,然后在这些.cpp文件中包含这个头文件?
这是一种有效的方法吗?
在.hpp文件中包含.cpp文件是不是很糟糕?为什么?
在典型的代码设置中,是的.它没有任何用处,可能导致"重复定义"错误.
更重要的是,它混合了实现和接口部分之间的分离.当包含实现的文件包含在内时,它通常会更改为.inl(从"内联")扩展名.
我是否应该在.cpp文件中包含标题保护?
不会.标头防护装置会阻止一个翻译单元中的两个(或更多)其他标头包含两次相同的标头.由于.cpp每个翻译单元只有一个文件,因此不会出现此问题.
为了说明,示例包含可能如下所示:
common.hpp
/ \
/ \
A.hpp B.hpp
\ /
\ /
file.cpp
Run Code Online (Sandbox Code Playgroud)
在这种情况下,头文件保护在common.hpp防止其出现两次在TU引入file.cpp.
如果我的.cpp文件中有两个或更多需要使用相同的头文件,那么包含所有这些头文件的最佳方法是什么?
一般来说,你不应该被长链包围害怕.它看起来不那么可怕.如此说来,"聚集体"报头可用于如果所述报头实际上形成一个树结构(使包括子集更加容易,像collections.hpp和collections/vector.hpp+ collections/list.hpp)或以包括每一个从所述库头.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |