Vincent Robert のコメントは正しいです。C++ で名前空間を適切に使用するにはどうすればよいですか? .
名前空間の使用
名前空間は、少なくとも名前の衝突を避けるために使用されます。Java では、これは "org.domain" イディオムによって強制されます (自分のドメイン名以外は使用しないと想定されているため)。
C++ では、モジュール内のすべてのコードに名前空間を与えることができます。たとえば、モジュール MyModule.dll の場合、そのコードに名前空間 MyModule を指定できます。MyCompany::MyProject::MyModule を使っている人をどこかで見かけました。これはやり過ぎだと思いますが、全体として、私には正しいようです。
「使う」を使う
using は、1 つ (またはすべて) のシンボルを名前空間から現在の名前空間に効果的にインポートするため、細心の注意を払って使用する必要があります。
あなたのヘッダーはそれを含むすべてのソースを汚染するので(それはマクロを思い出させます...)、そしてソースファイルでさえ、グローバルスコープでインポートされるため、関数スコープ外の悪いスタイルであるため、ヘッダーファイルでこれを行うのは悪です名前空間からのシンボル。
「using」を使用する最も安全な方法は、選択したシンボルをインポートすることです。
void doSomething()
{
using std::string ; // string is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
std::cout << a << std::endl ;
}
void doSomethingElse()
{
using namespace std ; // everything from std is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
cout << a << endl ;
}
「名前空間 std を使用している」がたくさん表示されます。チュートリアルまたはサンプルコードで。その理由は、記号の数を減らして読みやすくするためであり、良い考えだからではありません。
「名前空間 std を使用 ;」Scott Meyers が推奨していません (正確にはどの本かは覚えていませんが、必要に応じて見つけることができます)。
名前空間の構成
名前空間はパッケージ以上のものです。別の例は、Bjarne Stroustrup の「The C++ Programming Language」にあります。
「特別版」の8.2.8 Namespace Compositionで、AAA と BBB の 2 つの名前空間を CCC と呼ばれる別の名前空間にマージする方法について説明しています。したがって、CCC は AAA と BBB の両方のエイリアスになります。
namespace AAA
{
void doSomething() ;
}
namespace BBB
{
void doSomethingElse() ;
}
namespace CCC
{
using namespace AAA ;
using namespace BBB ;
}
void doSomethingAgain()
{
CCC::doSomething() ;
CCC::doSomethingElse() ;
}
独自のカスタム名前空間インターフェイスを構築するために、さまざまな名前空間から選択したシンボルをインポートすることもできます。私はまだこれの実用的な使い方を見つけていませんが、理論的にはクールです。