2010-09-28 28 views

回答

6

是的,这是可以接受的。它一定会编译。但是,如果它使代码组织更清洁,那么这可能是好的。大多数模板定义已经不再需要,所以你没有做任何前所未闻的事情。尽管如此,这个类可能有一些缺点依赖于其他类。如果最终不得不将整个定义包含在使用该类的其他文件中,则与仅具有简短的类声明相比,它可能会产生额外的编译时间。

如果这似乎是一个真正的问题,你可以测量你的编译时间。

如果您可以获得一份副本,The c++ Programming Language(和许多其他书籍)有关于源代码组织和将代码分离为.h和.cpp文件的具体优点的详细部分。

2

是的,这是可以接受的。此外,如果你做模板,并且你没有支持export的编译器,那么你没有选择。

但是,请注意它可以增加依赖性,从而使编译速度变慢。

2

如果您将在未来的代码或项目中使用该头文件,并且希望与其他人共享,那将会很好。

0

取决于你如何链接。为了避免看到消息,如重新定义blah,第13行文件blah.h中的前一个定义只是将声明放在.cpp中。

3

这取决于你的目标。

对于一个宠物项目来说,这是可以接受的,但是任何事情都是真的。

对于一个真正的项目,你需要问自己一些问题:

  • 你有几个依赖呢? (是)
  • 是你的逻辑/实现可能经常改变吗? (不,或者看下一个问题)
  • 这个班多少钱? (没有太多或太多但不会改变)

如果回复满足您,请继续。

这主要是依赖管理问题。通过将头文件中的方法定义放入头中,它们可能会被编译器内联,这意味着每次更改时都必须重新编译依赖于此类的所有内容。

模板是这样做的,但是模板通常只有很少的依赖关系(其他包括),并且您相对被迫像这样继续(尽管您可以将非模板相关代码外部化以减少依赖关系)。

对于依赖性管理最重要的真正的大型项目,我建议不要。在这些项目中,稳定的ABI以及促进二元兼容性变化的能力在发生问题时是生命保护者,他们非常值得开发者“轻微”的不便。

无论如何,请不要在班级中定义方法。即使内联,您也可以在类声明之后定义它们。这使得人们更容易阅读(几个月后自己)来快速掌握界面。

+1

IMO,如果你的方法大多是单行的,那么在类中定义方法并不会真正分散注意力,有时会增加代码的可理解性;实际上为什么有人不想创建一个单独的.cpp文件的唯一原因是因为该类很小,并且方法都很平凡。 – 2010-09-28 07:36:50

+0

@Lie Ryan:我同意在班级中间定义一行(如'empty' /'size'),而不会打扰太多......但是,很难定义一行之间的限制,班轮,因为它不适合在屏幕上而被包裹的单线内衬,比包裹的单线内衬短两条线,......之后,这是所有人打来的电话。 – 2010-09-28 07:49:43

+2

但是,您不需要定义硬限制,只需按照您的直觉感受即可。最后,编译器仍然会产生相同或相等的输出。许多编程风格指南促进一致的风格,只是因为一致性很容易量化,如果某些东西总是看起来相同,那么它是一致的;然而在许多情况下,这种对一致性的痴迷是以忽视难以量化的潜在收益为代价的。可读性和可理解性不容易量化;因此,在风格指南中经常会被忽略。 – 2010-09-28 08:06:01