7

多くのインクルードを処理する方法を学び、コードを整理しようとしています。

私は 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/"

これをほぼすべてのヘッダーファイルに含めます

#include "Util.h"
#include "Manager_Docks.h"
#include "Manager_Tools.h"
#include "Manager_Console.h"
#include "ui_MainWindow.h"
...
  • それを行うより良い方法はありますか?
  • これにより、コンパイル時間が大幅に遅くなりますか?

また、すべての.cppのみにUtil.hのみを含めることも考えており、ヘッダー ファイル用に別のHeader_Util.hを用意して、次のようにします。

Header_Util.h

#pragma once

class IObserver;
class QAction;
class QDockWidget;
class QFileDialog;
...
  • これはより良い解決策ですか?
  • また、precompiled headersというものがあることは承知していますが、自分は使ったことはありません。これはおそらく私の問題の解決策であり、調査すべきものですか? 違いがあれば、VS2012を使用してWindowsを使用しています。
  • ...そしてすべての質問を要約します。あなたは私の代わりに何をしたでしょうか?
4

2 に答える 2

5

TL;DR: 一般に、C++ または C を開発するときは、不必要に表示されるヘッダーを削除するのが最善です。

それを行うより良い方法はありますか?

プロジェクトが小さくない場合、一般的には非常に悪い考えです。ほとんどのソースは、ほとんどのファイルの宣言を見る必要はなく、それらは高レベルのオブジェクトです。少なくともカテゴリごとに分けてください。

これにより、コンパイル時間が大幅に遅くなりますか?

一般的に、はい。例: ほとんどのソース ファイルは、UI ライブラリについて知る必要がありますか? おそらくそうではありません。

これはより良い解決策ですか?

はい。前方宣言のコストは非常に小さいです。

また、プリコンパイル済みヘッダーというものがあることは知っていますが、私自身は使ったことがありません。これはおそらく私の問題の解決策であり、調査すべきものですか?

一部のビルドでは、多くの時間を節約できます。他の人にとっては、物事が遅くなるだけかもしれません。それらを使用する場合は、ビルド時間を測定して、プロジェクトと必要なインクルードにどちらが適しているかを確認してください。

通常、すべてのソースが非常に高レベルで大規模なもの (GUI ライブラリや抽象レイヤーなど) について知る必要はありません。通常、ソースの一部のみが、これらの上位レベルのライブラリについて知る必要があります。これは、多くの場合、コードベースを小さなターゲット/ライブラリに分割するのに適したポイントです。

...そしてすべての質問を要約します。あなたは私の代わりに何をしたでしょうか?

すべてのソースが表示されるように、これらすべての高レベルのライブラリ/ヘッダーをヘッダーに詰め込みません。大規模なコードベースで元に戻すのは面倒であり、途中でビルド時間に多くのコストがかかる傾向があります. 前方宣言を含むヘッダーは適切です。

于 2013-04-28T10:39:12.667 に答える