Ade*_*ost 7 c++ include header-files precompiled-headers forward-declaration
我正在努力学习如何处理很多包含,并且仍然保持我的代码整洁.
我正在编写一个Qt应用程序,我把常用的文件(并没有改变)放在一个名为"Util.h"的文件中.
Util.h
#pragma once
#include <Core/IObserver.h>
#include <Core/Math.h>
#include <QAction>
#include <QDockWidget.h>
#include <QFileDialog>
#include <QGraphicsBlurEffect>
#include <QLabel.h>
#include <QMainWindow.h>
#include <QMenu.h>
#include <QMessageBox.h>
#include <QShortcut.h>
#include <QSignalMapper>
#include <QSound>
#include <QString>
#include <QTimer.h>
#include <QTreeView>
#include <QStandardItemModel>
// Path to icons
#define ICON_PATH \
"../../Assets/GUI/Icons/"
Run Code Online (Sandbox Code Playgroud)
然后我将它包含在几乎所有的头文件中
#include "Util.h"
#include "Manager_Docks.h"
#include "Manager_Tools.h"
#include "Manager_Console.h"
#include "ui_MainWindow.h"
...
Run Code Online (Sandbox Code Playgroud)
我也想到只在每个.cpp中都包含Util.h,并且对于头文件有一个单独的Header_Util.h,看起来像这样
Header_Util.h
#pragma once
class IObserver;
class QAction;
class QDockWidget;
class QFileDialog;
...
Run Code Online (Sandbox Code Playgroud)
TL; DR:通常,在开发C ++或C时,最好消除不必要的可见标头。
有更好的方法吗?
当您的项目不小的时候,这通常是一个非常糟糕的主意。大多数资源都不需要查看大多数文件的声明,而这些都是高级对象。至少将其按类别划分。
这会减慢编译时间吗?
通常,是的。示例:您的大多数源文件是否需要了解UI库?可能不会。
这是更好的解决方案吗?
是。前瞻性声明的成本非常小。
另外,我知道有些东西叫做预编译头文件,但从未使用过。这也许是我的问题的解决方案,我应该研究什么?
对于某些构建,它们可以节省大量时间。对于其他人,他们可能只会放慢脚步。如果选择使用它们,则测量构建时间,以确认哪个更适合您的项目以及所需的内容。
通常,您会发现所有来源都不需要了解非常高级的内容(例如,GUI库和抽象层)。通常,只有一部分资源需要了解那些更高级别的库。将您的代码库分解为较小的目标/库通常是一个好方法。
...并总结所有问题。在我这个地方你会做什么?
我不会将所有这些高级库/标头填充在标头中,以供所有来源查看。在大型代码库中撤消是很痛苦的,并且在此过程中往往会花费大量的构建时间。包含前向声明的标头是好的。