Effective C++読書メモ #31

2015年4月30日木曜日

Item 31: Minimize compilation dependencies between files
前回: Effective C++読書メモ #30
前回はinlineの使い方という話だった。今回はコンパイル時の依存関係をなるべく減らせという話。
再コンパイルを避けるためになんでもかんでもforward declarationへ逃がすのはむり。コンパイル時にオブジェクトの大きさを把握しておく必要があるし、テンプレート絡みだと正確な定義がどういうものか前方宣言だけではわからないから。
インタフェース定義のみを含んだクラスを作り、それにshared_ptrで実装クラスの実体を紐付けるpimplイディオムというのが紹介されてる。declarationとdefinitionでヘッダファイルを分けて両方メンテしろというのは結構厳しいなぁ。Clangとかコンパイル高速なやつを使えばそういう人間へ優しくない方法はそこそこ避けられる気がする。しかしこの用途のためにあるらしいiosfwd(iostreamのforward declarationをまとめたファイル)を知ることができたのはプラス。
この節でC++に純粋なinterfaceは構文として存在しないよというのを読めたのも結構プラス。
ところどころよく分からん(virtual ctorとかなんぞという)ので、この節はそのうち戻ってきてちゃんと読みなおす。節の結論としては、HandleクラスやInterfaceクラスは開発中のビルド時間削減に使って、最終版ビルド時にはこれらを外すようにするのが良いという話だった。
次からはC++におけるOOPの話。

0 件のコメント:

コメントを投稿