我个人使用c++的风格总是把类声明放在包含文件中,定义放在。cpp文件中,这很像Loki对c++头文件的回答,代码分离。不可否认,我喜欢这种风格的部分原因可能与我花了这么多年来编写Modula-2和Ada有关,这两者都有类似的规范文件和主体文件方案。

我有一个同事,他比我更了解c++,他坚持认为所有c++声明都应该尽可能地在头文件中包含定义。他并不是说这是一种有效的替代风格,甚至不是一种稍微更好的风格,而是说这是一种新的普遍接受的风格,现在每个人都在使用c++。

我不像以前那么灵活了,所以在我看到更多的人和他在一起之前,我并不急于加入他的行列。那么这个习语到底有多普遍呢?

只是给答案一些结构:现在的方式™,非常常见,有点常见,不常见,还是疯狂?


当前回答

我经常会把琐碎的成员函数放到头文件中,以允许它们内联。但是将整个代码体放在那里,只是为了与模板保持一致?那完全是胡说八道。

记住:愚蠢的一致性是心胸狭窄的妖怪。

其他回答

我经常会把琐碎的成员函数放到头文件中,以允许它们内联。但是将整个代码体放在那里,只是为了与模板保持一致?那完全是胡说八道。

记住:愚蠢的一致性是心胸狭窄的妖怪。

我把所有实现都放在类定义之外。我想把doxygen注释从类定义中删除。

我认为把所有的函数定义都放在头文件中是非常荒谬的。为什么?因为头文件被用作类的PUBLIC接口。这是“黑匣子”的外部。

当您需要查看一个类以引用如何使用它时,您应该查看头文件。头文件应该给出它能做什么的列表(注释以描述如何使用每个函数的细节),它应该包括一个成员变量列表。它不应该包括每个单独的函数是如何实现的,因为那是一船不必要的信息负载,只会使头文件混乱。

你的同事可能知道的是,大多数c++代码都应该被模板化,以实现最大的可用性。如果它是模板化的,那么一切都需要在一个头文件中,以便客户端代码可以看到它并实例化它。如果它对Boost和STL来说足够好,它对我们来说就足够好了。

我不同意这种观点,但这可能是它的来源。

我认为你的同事是对的,只要他没有进入这个过程,在头部写可执行代码。 我认为,正确的平衡是遵循GNAT Ada所指出的路径,其中.ads文件为其用户和其子程序包提供了完全适当的接口定义。

顺便说一句,Ted,你有没有在这个论坛上看到最近关于Ada绑定到CLIPS库的问题,这个问题是你几年前写的,现在已经没有了(相关的网页现在已经关闭了)。即使使用的是旧的Clips版本,对于愿意在Ada 2012程序中使用Clips推理引擎的人来说,这个绑定也是一个很好的开始示例。