割と多いのではないでしょうか。
ヘッダファイルの上の方で他のヘッダファイルをインクルードしちゃう人。
私もその一人なので、解決法を自分用メモ的にまとめておきます。
■関数ライブラリはソースファイルの方でインクルード
基本ですね。
■クラスを包含する場合は、値持ちではなく参照持ち
C++の特性上、構造体やクラスは値持ちすることが出来ますが、
ヘッダファイル依存が起こるので前方宣言した後に参照かポインタで持つ。
(私は)意外と忘れやすい。
■クラスを極力継承しない
クラスのインターフェースを作り、そっちを依存させて実装する。
インターフェースの方は一度作ればほぼ変更は無いので、依存させても殆ど問題はない。
もちろん設計をきちんとしていたら、の話。
■便利ヘッダファイルを作らない
クラスライブラリないし関数ライブラリでも、複数のファイルをインクルードするのは面倒なので一つのヘッダファイルで全てインクルードして、その便利ヘッダをインクルードするのはよろしくないということ。
そのクラスライブラリないし関数ライブラリが、これ以上変更を全くしないのならば(微細な変更も)OKですが、全然関係ないライブラリ内のスペース一つ増減しただけで再コンパイルが起こるのは明らかに非効率的。
他に何かあれば順次追加するかも……
何がなんでもヘッダファイルの依存を無くす
Re: 何がなんでもヘッダファイルの依存を無くす
おお、ためになるお話ありがとうございます!ちょうど今、ヘッダファイルの多重インクルードに悩まされているところなのです。一応はコンパイルが通るのですが、必要のないインクルードや必要のない前方宣言が多くてごちゃごちゃしていまして。
ポインタや参照ではなく値で包含させるときは、インクルードは不要で前方宣言さえあればいいのですね…。それを確認できただけでも大きな収穫です。早速修正しに行きます。
ポインタや参照ではなく値で包含させるときは、インクルードは不要で前方宣言さえあればいいのですね…。それを確認できただけでも大きな収穫です。早速修正しに行きます。