6

JavaからC++に移行しました。ソースコードの整理については少し混乱していました。

Javaには、各モジュール間で編成するパッケージがあります。

C ++ソースコードを整理するための一般的な方法は何ですか?

4

3 に答える 3

5

C または C++ の大規模なオープン ソース プロジェクトを見ると、ソースを整理するさまざまな方法が見つかります。ただし、いくつかの一般的なシナリオは、module(またはcomponent)のディレクトリ構造をsrcincludeそれぞれの 内で使用することmoduleです。または、逆にして、 と を使用することもできsrc\moduleますinclude\module

テストコードがある場合、それはしばしば amodule\testまたはに入りtest\moduleます。

大規模な C++ プロジェクトで興味深い課題の 1 つは、「コンポーネント間で共有されるヘッダー ファイルをどこに配置するか」です。include\public(またはpublic\include)がある場合もあれば、それぞれのコンポーネントがある場合もあります。

「他のユーザーが使用できる」コンポーネントと、内部でのみ使用されるコンポーネントを分離することは非常に便利です。コンポーネントの外部で「見える」場合は、より注意が必要です。コンポーネントが DLL として公開されていて、コンポーネントを使用する部分のソースを再コンパイルせずに DLL を更新するとどうなりますか [そうでないサードパーティのクライアントがある場合]ソース コードを持っていない場合 (または、少なくとも定期的にビルドする可能性が低い場合)、変更を加えるたびにプロジェクトを再ビルドするように強制する必要はありません。

大規模なプロジェクトでnamespacesは、名前の競合を防ぐために使用されます。

于 2013-03-04T13:25:58.687 に答える
0

最初の明白なルール:チーム/コラボレーションプロジェクトで作業している場合は、プロジェクトの明示的(組織のベストプラクティスを記述)または暗黙的(どのように行われたかを調査)のルールに従います。

自分でプロジェクトに参加している場合は、補完的な組織の概念が異なるため、C++には多くの自由があります。

  • 名前空間、
  • クラス、
  • ファイルシステムフォルダ、
  • ソースファイル

Javaよりもはるかに自由度が高いので、フォルダを名前空間に、ファイルをクラスにマッピングすることをお勧めします。

  • クラスごとに.h/.cppのペアを使用しますが、論理的であり、小さなファイルがたくさんないようにする場合は、ヘルパークラスまたは他のリンクされたクラスを含めることもできます。
  • 名前空間内のクラスと、名前空間の名前を持つフォルダー内の関連ファイルをグループ化します。

このようにして、クライアントは次のようなものを書くことができます。

#include "groupA/subgroupB/classC.h"
using namespace groupA;
subgroupB::classC object;
于 2013-03-04T13:24:16.207 に答える
0

部分的な回答:

まず、Java のように、ファイルをさまざまなフォルダーに整理できます。ヘッダー ファイルを #include する場合、path.of.the.package の代わりに relative/path/from/src と入力します。

C++ は名前空間の概念もサポートしています: http://www.cplusplus.com/doc/tutorial/namespaces/

于 2013-03-04T13:14:54.563 に答える