JavaからC++に移行しました。ソースコードの整理については少し混乱していました。
Javaには、各モジュール間で編成するパッケージがあります。
C ++ソースコードを整理するための一般的な方法は何ですか?
JavaからC++に移行しました。ソースコードの整理については少し混乱していました。
Javaには、各モジュール間で編成するパッケージがあります。
C ++ソースコードを整理するための一般的な方法は何ですか?
C または C++ の大規模なオープン ソース プロジェクトを見ると、ソースを整理するさまざまな方法が見つかります。ただし、いくつかの一般的なシナリオは、module
(またはcomponent
)のディレクトリ構造をsrc
、include
それぞれの 内で使用することmodule
です。または、逆にして、 と を使用することもできsrc\module
ますinclude\module
。
テストコードがある場合、それはしばしば amodule\test
またはに入りtest\module
ます。
大規模な C++ プロジェクトで興味深い課題の 1 つは、「コンポーネント間で共有されるヘッダー ファイルをどこに配置するか」です。include\public
(またはpublic\include
)がある場合もあれば、それぞれのコンポーネントがある場合もあります。
「他のユーザーが使用できる」コンポーネントと、内部でのみ使用されるコンポーネントを分離することは非常に便利です。コンポーネントの外部で「見える」場合は、より注意が必要です。コンポーネントが DLL として公開されていて、コンポーネントを使用する部分のソースを再コンパイルせずに DLL を更新するとどうなりますか [そうでないサードパーティのクライアントがある場合]ソース コードを持っていない場合 (または、少なくとも定期的にビルドする可能性が低い場合)、変更を加えるたびにプロジェクトを再ビルドするように強制する必要はありません。
大規模なプロジェクトでnamespaces
は、名前の競合を防ぐために使用されます。
最初の明白なルール:チーム/コラボレーションプロジェクトで作業している場合は、プロジェクトの明示的(組織のベストプラクティスを記述)または暗黙的(どのように行われたかを調査)のルールに従います。
自分でプロジェクトに参加している場合は、補完的な組織の概念が異なるため、C++には多くの自由があります。
Javaよりもはるかに自由度が高いので、フォルダを名前空間に、ファイルをクラスにマッピングすることをお勧めします。
このようにして、クライアントは次のようなものを書くことができます。
#include "groupA/subgroupB/classC.h"
using namespace groupA;
subgroupB::classC object;
部分的な回答:
まず、Java のように、ファイルをさまざまなフォルダーに整理できます。ヘッダー ファイルを #include する場合、path.of.the.package の代わりに relative/path/from/src と入力します。
C++ は名前空間の概念もサポートしています: http://www.cplusplus.com/doc/tutorial/namespaces/