パッケージ化されたコードで名前空間を使用するための最良/最もクリーンな方法は何ですか?
たとえば、ブーストのようなライブラリでは、非常に組織化された名前空間管理があるようです。名前を明確にするためにいくつかの手法が使用されています。ただし、重要なことは、次のようなコードはあまり表示されないということです。
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_ifcomponent2のヘッダーファイルに入れることはできますか?using ...::component1::component2
上記の例に必ずしも関連しない提案も含めて、私はどんな提案も受け入れます。