新しい名前空間を作るためには namespace 文を使います。
namespace 文に続けてコードを書くことによって、ブロックの中で定義した関数やクラスや変数がその名前空間に属するようになります。関数やクラスや変数を独自の名前空間に属させることによってシンボルの衝突を減らすことができるようになります。
namespace sample { void someFunc() { } class SomeClass() { } int someValue; }
名前空間の中にあるオブジェクトにアクセスしたい場合は、名前空間の名前とシンボルをふたつのコロンで区切って次のように書きます。
sample::someFunc(); sample::SomeClass *instance = new sample::SomeClass(); std::cout <<sample::someValue <<std::endl;
名前空間のシンボルをインポートしたい場合は using namespace 文を使います。 using namespace 文に続けて名前空間の名前を書くと、そのブロックの中だけ名前空間を省略することができるようになります。ただ、あまり広いブロックで using namespace を使うと、名前空間の意味が薄れてしまうため注意が必要です。
{ using namespace sample; someFunc(); } someFunc(); // エラー!このスコープに using namespace がない sample::someFunc(); // OK
なお、名前空間はネストすることができます。シンボルを階層構造にしたい場合に便利です。
namespace com { namespace game_create { void someFunc(); } } com::game_create::someFunc();
Contributions