Ste*_*sop 12
C和C++约定是每个库的一个头文件,或库的一部分,而不是每个类的一个头文件.尝试将相关课程组合在一起.因此,例如在标准库中<set>包含两者std::set和std::multi_set,但是那些是非常相似的模板.
虽然没有任何真正一致的公共标题规则,但Boost.asio有一个很大的头文件.Boost.DateTime被合理地划分得很远,但仍然没有达到单一类型的水平.
如果您愿意,可以将每个类的成员函数的实现放在一个源文件中.如果您遵循GNU C样式,即使每个函数都有一个源文件,尽管我认为我不建议使用C++.您可以通过让它们包含多个单独的标头来实现面向公众的头文件.
它可能同样依赖于您的版本控制和构建过程 - 在不触及包含与该类无关的任何内容的任何文件的情况下更改类很方便,因为最低限度的重建和更改日志清楚地标识了文件名中的更改内容.但是,一个类不一定是被认为是"无关代码"的边界.
例如,如果您正在使用迭代器编写集合,或者使用某个框架来监听侦听器的类,其中侦听器将在主类上执行操作,则将它们分开是没有多大意义的.从口头上讲,这些是"内部类",即使你没有在C++中将它们实现为嵌套类.