前向声明包括声明包括(ClassFwd.h + Class.h)
在Effective C ++(第3版)中,Scott Meyers在第31项中建议,除了经典的声明(.h)和定义(.cpp)文件之外,类应该具有前向声明包含文件(fwd.h),哪个类不需要完整定义可以使用,而不是向前声明自己。
我有点看到它的情况,但我真的不认为这是一个可行的选择...它似乎很难维持,相当矫枉过正,几乎没有必要。
但是,我可以看到它用于模板前向声明,它相当重。但对于简单的课程?这似乎很难维护,并且会创建一大堆几乎空的包含文件,这些文件只是用于非常小的目的......值得麻烦吗?
这是一个例子:
// Class.h
class Class
{
Class();
~Class();
};
// ClassFwd.h
class Class;
// Class.cpp
Class::Class()
{
}
Class::~Class()
{
}
我的问题:
你们有什么感想?如果这是一个很好的做法?
注意我最感兴趣的是这个练习的论据,看看我是否错过了一些让我同意Scott Meyers的内容。
没有找到相关结果
已邀请:
4 个回复
娜拐赐巫潭
目录将包含所有公共类头以及一个前向声明头。这使得图书馆在包含方面轻量化。此库外的任何标头仅包含转发标头(
),而此库外的源包括必要的完整标头。还可以提供包含所有其他标头的便捷标头(
),以便在源文件中使用。 在前向声明标题中放置的另一个东西是
s,用于
,特别是在具有工厂类的继承层次结构的情况下,返回指向实现的指针。 以上内容对于具有大量内部库的大型应用程序非常有用。对于这种情况,上述内容的改进将是将公共标题放在
中。这样你图书馆的客户就必须包括
。可以将其视为标题的命名空间。 祝好运!
味芯憨
没有任何优点和许多缺点。 特别是在访问头部可能非常耗时的情况下,使用简单的前向声明来避免访问头部;把它们放在自己的标题中会失败的目的...... 对于模板化的东西,正如你所说,这是另一回事。例如。从标准库中查看
。 干杯&心连心。
视蕉梁拌客
款去芳尾脊
现在A和B可能合理地位于不同的头文件中,甚至可能是不同的项目。然而,他们的依赖不是一些设计缺陷,而是完全合乎逻辑且必要的。你是做什么? 首先包括一个针对eeach所需项目的Types.h前向声明头,即前向声明每个类没有自己的头文件。 然后包括所有必需项目的Class.h。这些头文件需要转发声明才能编译。 包括主项目的标题。 在一个相当大的解决方案(500k LOC)中,我发现这种模式非常容易管理。否则,如果您更改了类声明,那么在哪里可以找到您在任意数量的其他头文件中单独生成的所有前向声明?