C++头文件和源文件的设计实现
C++ Header and Source file design implementation
我对布置C++头文件和源文件的设计原则有一些疑问:我最近接手了一个项目,在这个项目中,以前的程序员曾经有过这种情况,这特别令人讨厌,因为我在某个地方读到,我们不应该在.hpp文件中包含.cpp文件(预处理器只会将.cpp文件复制并粘贴到.hpp中(
Q1.在.hpp文件中包含.cpp文件不好吗?为什么?
由于上述问题,当我在eclipse中加载程序时,我面临许多"多重声明"错误,尽管我在所有.hpp文件中都添加了头保护。
Q2.我应该在.cpp文件中也包括头保护吗?我后来也试过了,但没有用。对此有什么建议吗?
Q3.如果我的.cpp文件中有两个或多个需要相同的头文件使用了包含所有这些头文件的最佳方式是什么?我应该吗创建一个新的头文件,比如h1.hpp,包括所有的头文件I需要在这2个或多个.cpp文件中,并在以后包含在此标头中那些.cpp文件中的文件?
这是一种有效的方法吗?
在.hpp文件中包含.cpp文件不好吗?为什么?
在典型的代码设置中,是的。它没有任何用处,并且可能导致"重复定义"错误。
更重要的是,它混合了实现和接口部分之间的分离。当要包含包含实现的文件时,通常会将其扩展名更改为.inl
(来自"内联"(。
我应该在.cpp文件中也包括头保护吗?
没有。收割台防护装置可防止一个翻译单元中的两个(或多个(其他收割台两次包含同一收割台。由于每个翻译单元只有一个.cpp
文件,因此不会出现此问题。
举例来说,一个包含的示例可能如下所示:
common.hpp
/
/
A.hpp B.hpp
/
/
file.cpp
在这种情况下,common.hpp
中的标头保护可防止它在为file.cpp
引入的TU中出现两次。
如果我的.cpp文件中有两个或多个需要使用相同的头文件,那么包含所有这些头文件的最佳方式是什么?
一般来说,你不应该被一条长长的包含链吓到。它没有看上去那么可怕。也就是说,如果标头实际上形成了一个树结构(使包括子集更容易,如collections.hpp
和collections/vector.hpp
+collections/list.hpp
(,或者包含库中的每个标头,则可以使用"聚合"标头。
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 为测试目标创建具有不同源文件夹的文件
- 如何正确实现和访问运算符的各种自定义枚举器
- C++:实现定义了可接受的物理源文件字符
- C 在多个源文件中包含具有同一类实现的不同标题文件
- 制作:没有实现目标的规则 - 找不到源文件
- 如何在源文件中实现嵌套类构造函数
- C++头文件中定义类,并在源文件中实现其成员
- Qt:LNK2001和LNK2019 跨源文件实现信号/时隙后会出现错误
- 在 C++ 中将 typedef 函数从标头实现到源文件中
- C++头文件和源文件的设计实现
- 使用头/源文件来分离接口和实现
- 静态库头文件包括其他头文件。我是否需要这些头文件的实现/源文件?