Flat Leon Works

アプリやゲームを作ってます。

【C++ アイデア】複数の名前空間に同じ別名を与える

C++では名前空間に別名を与えることができます。

namespace HogeCore {}
namespace Hoge = HogeCore;

しかし、複数の名前空間に同じ別名を与えることはできません。

namespace HogeCore {}
namespace HogeGraphics {}
namespace HogeAudio {}

namespace Hoge = HogeCore;
namespace Hoge = HogeGraphics; // コンパイルエラー
namespace Hoge = HogeAudio; // コンパイルエラー

ちなみにサンプルコードの意図としては、Hogeというライブラリの内部に複数の名前空間が存在し、ライブラリのユーザーにはすべてHogeという名前(名前空間)でアクセスできるようにさせたい、というものです。

C++では複数の名前空間に同じ別名を与えることはできませんが、別の方法で実質的に同じようなことを行うことができます。その別の方法とは、別名用の名前空間を作り、そのなかでusing namespaceを使うことです。

namespace HogeCore { class A{}; }
namespace HogeGraphics { class B{}; }
namespace HogeAudio { class C{}; }
 
// 別名用の名前空間を作り…
namespace Hoge {
    // 使用可能にしたい名前空間をusing namespaceする
    using namespace HogeCore;
    using namespace HogeGraphics;
    using namespace HogeAudio;
}
 
int main()
{
    Hoge::A a;
    Hoge::B b;
    Hoge::C c;
    return 0;
}

注意点としては、名前空間を1つにまとめることで名前の衝突が起こる可能性があります。乱用はしないようにしましょう。

参考: c++ - Multiple aliases for a namespace? - Stack Overflow