【发布时间】:2026-01-11 10:15:02
【问题描述】:
我见过使用#include 的前向标头的代码,否则会有前向声明。 “前向标头”是指仅包含前向声明的标头。因此,如果 class.h 包含模板,您可能有 class.cpp、class.h 和 class_fwd.h 或只有 class.h 和 class_fwd.h。
Boost 中有一些例子,它有一些file_fwd.hpp 文件。
什么时候创建和包含前向标头比显式前向声明更可取?什么时候不是?这种做法的优点和缺点是什么?是否应该为所有标头创建一个转发标头?
这个问题本质上是一样的:
Forward declaration include, on top of declaration include (ClassFwd.h + Class.h)
为什么我对那个问题的答案不满意:
- Daniel Lidström 的回答描述了他所做的相关事情,但没有具体解决这个问题。
- Sebastian 的回答主要解释了为什么通常使用前向声明,然后在类似于 Daniel Lidström 所描述的模式上使用 cmet。
- Dialectus 的回答含糊不清,但确实暗示模板是使用前向标头的一个原因。
- 干杯和hth。 - Alf 的答案与 Dialecticus 的答案相似。
【问题讨论】:
-
好吧,如果一个库提供了很多类型(例如
<iostream>),并且用户只需要在其标头中进行前向声明是合理的(例如std::ostream & foo(std::ostream &)),那么这只是礼貌让库提供一个仅前向声明的标头。 -
解释?这是指我链接的副本吗?我不是说了吗?
-
如果有一个问题本质上是相同的,但您想要一个更好的答案,获得它的一种方法是提供小额奖励以吸引注意力。添加评论为什么您认为当前的答案不令人满意。免责声明:我认为我无法给出比现有答案更好的答案。
标签: c++ include forward-declaration