C++ プログラミングガイド

不要なヘッダーファイルのインクルード

C++ で書かれたプログラムでは通常 C プログラムよりも宣言の数が多く、そのためコンパイル時間が C プログラムよりも長くなります。宣言の数は、いくつかの手法を使用することにより減らせます。

手法の 1 つは、ヘッダーファイルをべき等にするように定義されたマクロを使用して、ヘッダーファイル自体を条件付きでインクルードするものです。ただしこの手法は、ファイル間の依存を増やします。


#ifndef HEADER_H
#include“header.h”
#endif


注 -

システムヘッダーファイルには、_Xxxx (X は大文字) という書式の識別子が含まれていることがよくあります。これらの識別子は予約されているため、保護のためのマクロでは、この書式の識別子は使用しないでください。


コンパイル時間を減らす別の方法として、定義を含むヘッダーファイルをインクルードせずに、不完全なクラスと構造体 (struct) 宣言またはクラス (class) 宣言を使用できます。この手法は、完全な定義が不要で、識別子が typedef でも template でもなく、class または struct である場合に使用できます (標準ライブラリは、クラスではなくテンプレートである typedef を多数含む)。たとえば、次のように記述する代わりに、


#include“class.h”
a_class* a_ptr;

次のように記述します。


class a_class;
a_class* a_ptr;

(a_class が実際に typedef である場合、この手法は無効です)

もう 1 つの方法として、Erich Gamma 著の『オブジェクト指向における再利用のためのデザインパターン』 (ソフトバンク) に述べられているように、インタフェースクラスとファクトリを使用することもできます。