88

私の開発システム (Codegear C++Builder) の気まぐれの 1 つは、自動生成されたヘッダーの一部が、.

using namespace xyzzy

...それらのステートメントは、私が最も望んでいない、または期待していないときにコードに影響を与えます。

これを回避するために、以前の「using」ステートメントをキャンセル/オーバーライドする方法はありますか。

多分...

unusing namespace xyzzy;
4

7 に答える 7

62

いいえ。しかし、解決策の可能性があります。次のように、include ディレクティブを独自の名前空間で囲むと...

namespace codegear {
    #include "codegear_header.h"
} // namespace codegear

...その後、そのヘッダー内の using ディレクティブの効果は中和されます。

それは場合によっては問題になるかもしれません。そのため、すべての C++ スタイル ガイドでは、"using namespace" ディレクティブをヘッダー ファイルに配置しないことを強く推奨しています。

于 2008-10-03T17:39:08.487 に答える
58

いいえ、名前空間の使用を取り消すことはできません。あなたができる唯一のことは、using namespace-statement をブロックに入れてその範囲を制限することです。

例:

{
    using namespace xyzzy;

} // stop using namespace xyzzy here

自動生成されたヘッダーで使用されるテンプレートを変更できるかもしれません。

于 2008-10-03T17:34:06.373 に答える
17

競合で明示的な名前空間を使用することで行き詰まっている可能性があります。

string x; // Doesn't work due to conflicting declarations
::string y; // use the class from the global namespace
std::string z; // use the string class from the std namespace
于 2008-10-03T17:38:35.460 に答える
10

今後の参考のために: XE バージョン以降、恐ろしい int を避けるために #define できる新しい値がありusing namespace System;ます: DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE

于 2011-01-10T23:17:22.717 に答える
3

ビルド プロセスの一部として sed、perl、またはその他のコマンド ライン ツールを使用して、生成された後、使用される前に、生成されたヘッダーを変更するのはどうですか?

于 2008-10-03T17:55:23.930 に答える
1

useVisual Studio 2005 での簡単な実験では、これらのヘッダーを独自の名前付き名前空間で囲んでから、この名前空間から必要なものを囲むことができることを示しています (ただしuse、隠したい名前空間が導入されるため、名前空間全体ではありません。

于 2008-10-03T17:37:54.620 に答える