2012-02-15 9 views
10

C++クラスを持つと仮定します。そして、私のクラスの中でしか見ることができない名前空間があります。そのために何をすべきか?C++クラスの中で "using namespace"を宣言してもいいですか?

class SomeClass 
{ 
    using namespace SomeSpace; 

public: 
    void Method1(); 
    void Method2(); 
    void Method3(); 
}; 

namespace SomeSpace 
{ 
    /*some code*/ 
}; 
+1

目に見えるとはどういう意味ですか?ネームスペースは、プライベート/パブリックのようなものではありません。 – KillianDS

+0

1つのオプションはクラス*を名前空間に入れることです。もしそれがその名前空間にあまり依存しているのであれば、それはなぜ外にありますか? –

+0

[なぜ "using"宣言をクラス宣言の中に入れられないのですか?](https://stackoverflow.com/questions/2134844/why-cant-i-put-a-using-declaration-inside -a-class-declaration) –

答えて

7

using namespace X;using directiveと呼ばれ、クラスのスコープのみ名前空間と機能の範囲で表示されますが、することはできません。だからあなたがしようとしていることはC++では不可能です。あなたができるベストは、そのクラスの名前空間のスコープにusingディレクティブを書くことです。これは望ましくないかもしれません。二思想に

は、しかし、あなたの言葉を分析し、

は、C++クラスを持つと仮定します。そして、私のクラスの中でしか見ることができない の名前空間があります。そのために何をすべきか?

私は次のようなものをお勧めします。これはあなたが望むものではありません。

class A 
{ 
public: 
    void Method1(); 
    void Method2(); 
    void Method3(); 

private: 

    class B 
    { 
     //public static functions here, instead of namespace-scope 
     // freestanding functions. 
     //these functions will be accessible from class A(and its friends, if any) 
     //because B is private to A 
    }; 

}; 
+0

ネストされたクラスは、それらがどれほど便利であるかによってとても魅力的です。しかし、ネストされたクラスのメジャーなことは、他のクラスメンバーと同様に、ネストされたクラスのすべてのメンバーが、その囲むクラスのすべてのプライベート/保護されたメンバーにフルアクセスできるということです。ネストされたクラスを使用する特定の目的と理由ではなかった場合(おそらく大多数?)、基本的にカプセル化が完全に中断されます。 –

0

ありませんが、あなたはそのようにそれを行うことができます:ヘッダファイルで使用する名前空間ディレクティブを適用するかをお勧めし、多くの場合、悪いスタイルとして考えられていないが

namespace SomeSpace 
{ 
    /*some code*/ 
}; 

using namespace SomeSpace; 

class SomeClass 
{ 

public: 
    void Method1(); 
    void Method2(); 
    void Method3(); 
}; 

。あなたのクラスのソースファイル(.cpp)に入れても構いません。

関連する問題