パッケージ化されたコードで名前空間を使用するための最良/最もクリーンな方法は何ですか?
たとえば、ブーストのようなライブラリでは、非常に組織化された名前空間管理があるようです。名前を明確にするためにいくつかの手法が使用されています。ただし、重要なことは、次のようなコードはあまり表示されないということです。
typedef namespace1::namespace2::sth_else::a_class<namespace3::namespace4::b_class> type;
通常、クロスネームスペースはあまりありません。これは、優れたアーキテクチャだけでなく、優れた名前空間管理も示しています。問題は、優れた名前空間管理とは何かということです。
次のようなファイル構造があるとします。
component1/... (depends on reusable_if)
component2/... (depends directly on reusable_if and on component 1)
reusable/
reusable/some_part/
reusable/some_part/...
reusable/some_other_part/
reusable/some_other_part/...
reusable/SthThatUsesBothReusableParts.h (implements reusable_if/ISth.h)
reusable/SthThatUsesBothReusableParts.cpp (implements reusable_if/ISth.h)
reusable_if/
reusable_if/ISth.h (pure abstract class)
reusable_if/ISthElse.h (pure abstract class)
main.cpp (e.g. instantiates SthThatUsesBothReusableParts and passes to component1/2)
reusable_if /フォルダーがある理由は、component1とcomponent2の両方が同じインターフェースを再利用したいためです(したがって、どちらもインターフェースを排他的に所有していません)。また、プロジェクトは実際に非常に大きく、各フォルダーのクラスに適切な名前空間が必要であると想定しています。
そのようなプロジェクトに名前空間をどのように適用しますか?すべてのクラスを再利用可能/名前空間で宣言するとします::reusable
。reusable_ifのインターフェイスを名前空間::reusable
またはに配置する必要があります::reusable_if
か?それとも、component1とcomponent2で使用されているので、何もありませんか?
component1とcomponent2の名前空間はどうですか?覚えておくべきことはありますか?キーワードはusing
どうですか?::reusable_if
この名前空間を追加することにしたとしましょう。名前空間内に配置されている場合、component1とusing reusable_if
component2のヘッダーファイルに入れることはできますか?using ...
::component1
::component2
上記の例に必ずしも関連しない提案も含めて、私はどんな提案も受け入れます。