4

基本的に、私は次の形式で提供されているいくつかのヘッダーファイルを使用しています。

#include <iostream>

using namespace std;

class bar
{
public:
    void printSomething(void)
    {
        cout << "This is an example." << endl;
    }
}

私の質問は、提供されたヘッダーを変更できないためstd、ファイル内の名前空間を削除して、デフォルトのグローバル名前空間に戻すにはどうすればよいですか?using namespace ::;「 」と「」を試しusing namespace ;ましたが、コンパイラはどちらにも満足していません。名前空間でクリーンなスレートを強制する方法についてのアイデアはありますか?

4

2 に答える 2

7

できません。そのため、このusing namespace条項は非常に価値があります。ただし、これらのヘッダーを別の名前空間内に含めることができます。

namespace bleh {
    #include "library_that_uses_evul_using_namespace.h"
}

blehそれは名前空間だけを汚染します。

于 2012-12-13T01:59:51.003 に答える
5

「usingnamespace」を取り除くことはできません。複数の「usingnamespace」ステートメントを持つことができ、それらは付加的です。

ただし、悪意のあるヘッダーを独自の名前空間にラップすることはできます。

namespace Crap
{
    #include "maliciousHeader.h"
}

このように、「using namespace std」は、名前空間Crapにのみ適用されます。上記のコードを、プログラムに実際に含めるヘッダーである別のヘッダーに配置することをお勧めします。

于 2012-12-13T01:58:56.630 に答える