我应该将许多功能放在一个文件中吗?或者,或多或少,每个文件一个函数?

新手上路,请多包涵

我喜欢组织我的代码,所以理想情况下我希望每个文件一个类,或者当我有非成员函数时,每个文件一个函数。

原因是:

  1. 当我阅读代码时,我总是知道应该在哪个文件中找到某个函数或类。

  2. 如果每个头文件是一个类或一个非成员函数,那么当我 include 头文件时,我不会包含一团糟。

  3. 如果我对一个函数做一个小的改动,那么只有那个函数需要重新编译。

但是,将所有内容拆分为许多头文件和许多实现文件会大大减慢编译速度。在我的项目中,大多数函数访问一定数量的模板化其他库函数。这样代码将被一遍又一遍地编译,每个实现文件一次。目前在一台机器上编译我的整个项目需要 45 分钟左右。大约有 50 个目标文件,每个目标文件都使用相同的昂贵编译头文件。

也许,每个 文件有一个类(或非成员函数)是否可以接受,但是将许多或所有这些函数的实现放入 一个 实现文件中,如下例所示?

 // foo.h
void foo(int n);

// bar.h
void bar(double d);

// foobar.cpp
#include <vector>
void foo(int n) { std::vector<int> v; ... }
void bar(double d) { std::vector<int> w; ... }

同样,优点是我可以只包含 foo 函数或 bar 函数,整个项目的编译会更快,因为 foobar.cpp一个 文件,所以 std::vector<int> (这只是其他一些昂贵的编译模板结构的示例)必须只编译一次,而不是如果我分别编译了 foo.cppbar.cpp .当然,我上面的理由 (3) 不适用于这种情况:在更改 foo(){…} 之后,我必须重新编译整个可能很大的文件 foobar.cpp

我很好奇你的意见是什么!

原文由 Frank 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 340
1 个回答

恕我直言,您应该将项目组合成逻辑分组并基于此创建文件。

当我编写函数时,通常有六个左右紧密相关的函数。我倾向于将它们放在一个头文件和实现文件中。

当我编写类时,我通常将自己限制为每个头文件和实现文件一个重量级类。我可能会添加一些便利功能或小型辅助类。

如果我发现一个实现文件长达数千行,这通常表明那里有太多内容,我需要将其分解。

原文由 Mr Fooz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题