Pra*_*tic 5 c++ include forward-declaration
我见过使用 #include 的前向标头的代码,否则会有前向声明。“前向标头”是指仅包含前向声明的标头。因此,您可能有 class.cpp、class.h 和 class_fwd.h,或者如果 class.h 包含模板,则只有 class.h 和 class_fwd.h。
\n\nBoost 就是这样的例子,它有 somefile_fwd.hpp 文件。
\n\n什么时候创建并包含前向标头比显式前向声明更可取?什么时候不是呢?这种做法的优点和缺点是什么?是否应该为所有标头创建一个前向标头?
\n\n这个问题本质上是一样的:
\n\n前向声明包括,声明顶部包括(ClassFwd.h + Class.h)
\n\n为什么我对该问题的答案不满意:
\n\n如果前向声明保留在标头中,则前向标头可以包含在主标头和/或实现文件中,以便编译器可以检查单一定义规则违规。(例如模板参数数量不匹配)
这本质上与函数原型的标头在函数实际定义时应该可见的原因相同。
此外,“不要重复”准则建议不要多次重复相同的声明。不是因为复制浪费了磁盘空间,甚至是因为将更改传播到多个位置很困难(尽管这经常被引用),而是为了根本防止存在不兼容版本的可能性。
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |