C/C++(個人プロジェクト)の静的ライブラリを書いています。ヘッダーがかなり大きくなると、ヘッダーを分割することをお勧めします。
現在、ヘッダーは次のようになっています。
MainClass.hpp:
impl
MainClass
宣言MainClass
無料の関数宣言MainClass
特殊化宣言MainClass
特殊化のない関数宣言AuxiliaryClass1
宣言AuxiliaryClass1
無料の関数宣言AuxiliaryClassN
宣言AuxiliaryClassN
無料の関数宣言MainClass
定義MainClass
無料の関数定義MainClass
特殊化定義MainClass
特殊化フリー関数定義AuxiliaryClass1
定義AuxiliaryClass1
無料の関数定義AuxiliaryClassN
定義AuxiliaryClassN
無料の関数定義どこ:
AuxiliaryClassK
は、論理的または構造的にMainClass
に関連するクラスです(たとえば、MainClass
のイテレータ、MainClass
内のネストされたクラス、MainClass
など)ClassX
無料関数 非メンバー関数がカプセル化を改善する方法 および Monoliths "Unstrung" で推奨これは非常に込み入っており、ナビゲートするのが困難になっているので、複数のヘッダーに分割すると役立つと思いました。しかし、私はそれを正しく行う方法を知りません。
構造は次のようになると思います。
MainClass.hpp:
#include
その他のヘッダー_ Class.hpp:
_Class
宣言_Class
無料の関数宣言_Class
定義_Class
無料の関数定義それぞれに_Class
があります:MainClass
、MainClass
特殊化、AuxiliaryClassK
。
私の質問は:
MainClass
の機能です)(ヘッダーは1000行を超えており、さらに長いヘッダーがあると予測しています)、それともそのままにしておくべきですか?MainClass.hpp
のみを含めて認識させる必要があります。他のヘッダーが背後にあることを明確にせずに表示すると、不要な混乱が生じます。1つのアイデアは、_
(アンダースコア)のような接頭辞を追加するか、impl
フォルダーに配置することです。(ここでも、これはクラスを非表示にすることではありません(名前空間を使用して行います)が、使用するヘッダーの後ろに分割を隠すためです)。次のことができます。
コードをヘッダーファイルごとに1つのクラスに分割します。
テンプレートの場合、クラス関数の実装は同じヘッダーファイルに常駐することができます(存在する必要があります(ヘッダーをインクルードする必要があるシナリオはありませんが、それらの定義はありません)。
依存関係(AuxiliaryClassK
)は#included
直接定義する代わりに。これにより、ヘッダーが小さくなり、コードの再利用が促進され(他の場所にヘッダーを含めることができるため、ヘッダーのみを含めることができます)、コードがよりクリーンになります。
コードをディレクトリに分割します。ディレクトリ構造は通常、ポリシーの問題です。 implフォルダーのアイデアを使用することも、(たとえば)boostのようにそれらをグループ化することもできます(すべての実装ファイルを含む機能領域ごとに1つのディレクトリ、および便宜上1つのインクルードファイル)。クライアントコードの1行に含めることができます。 )。
コンパイル時間を最小限に抑えるためにpimplイディオムを使用します。
原則として、_Classファイル名は使用しません。それらは異常です(決して良くないコードのWTF/LOC測定を増やします)。