2013-04-06 37 views
9

现在我根本不使用头文件。类都完全在一个单独的.cpp文件中。但为了节省编译时间,我现在想使用头文件。我的希望是,Visual Studio不会编译那些未针对调试版本进行修改的类。我必须在类的头文件中提到私有方法吗?

有没有办法在头文件中提及公共方法和成员。理论上这对编译器来说是足够的信息。如果另一个文件,比如main.cpp包含类头,则不需要私有方法和成员,是吗?

如何在不重新输入私有方法和成员的名称的情况下使用头文件?我想要的理由是编码生产力。当我想要添加一个小帮助函数到另一个方法使用的类时,我不想也要将它的签名添加到头文件中。

回答

3

我不知道有什么办法可以解决你所问的问题,但还有另一种方法可以给予一些隔离。你可能想看看pimpl idiom,因为它提供了有关私人信息的隔离。这是一些额外的工作,但它可能非常有用,特别是在大型项目中。

11

如果是另一个文件,比如main.cpp包含了类头,那么就不需要私有方法和成员了,对吗?

不,public方法和成员不一定就够了。例如,如果另一个.cpp文件要尝试并创建类的实例:

SomeClass instance; 

编译器将需要知道,除其他事项外,多少内存分配的SomeClass。为此,它需要完全了解SomeClass的私人数据成员。

您构思问题的方式使得听起来好像您打算与语言对抗。我认为这不是一个好方法。我认为最好的办法是按照您选择的语言通常按照事情的方式来做事情,并且只有在有明确的,明确需要的情况下才能做到这一点。

东西通常用C++实现的方式是,整个类声明变为在头文件,和的定义是在头文件和相应的.cpp文件之间某种方式分裂。确切分割由各种技术考虑决定。例如,模板和内联函数通常必须出现在头文件中。另一方面,将代码放在头文件中增加了依赖性,并且可能会增加构建时间。

有办法解决这些问题。但是,由于这涉及到额外的复杂性,我认为只有在明确需要的情况下才能做到这一点。

4

全部函数声明应该在头文件中去所有函数定义应该在cpp文件中去。在cpp文件中放置声明并不是一种好的编码习惯。

当您编写模板或内联函数时,您可以将定义放入标题中。

一旦在头文件中声明了类,就必须在类头声明中声明它的所有方法和成员,因为你的类不再在cpp文件中声明。

相关问题