私の開発システム(Codegear C ++ Builder)の気まぐれの1つは、自動生成されたヘッダーのいくつかが...
using namespace xyzzy
...それらのステートメント。これは、私が最も望んでいない、または期待していないときにコードに影響を与えます。
これを回避するために、以前の「using」ステートメントをなんとかしてキャンセル/オーバーライドできる方法はありますか?
多分...
unusing namespace xyzzy;
私の開発システム(Codegear C ++ Builder)の気まぐれの1つは、自動生成されたヘッダーのいくつかが...
using namespace xyzzy
...それらのステートメント。これは、私が最も望んでいない、または期待していないときにコードに影響を与えます。
これを回避するために、以前の「using」ステートメントをなんとかしてキャンセル/オーバーライドできる方法はありますか?
多分...
unusing namespace xyzzy;
回答:
いいえ。しかし、潜在的な解決策があります。次のように、includeディレクティブを独自の名前空間で囲む場合...
namespace codegear {
#include "codegear_header.h"
} // namespace codegear
...次に、そのヘッダー内のusingディレクティブの影響は無効になります。
それは場合によっては問題になるかもしれません。そのため、すべてのC ++スタイルガイドでは、ヘッダーファイルに「usingnamespace」ディレクティブを配置しないことを強く推奨しています。
いいえはできませんUNUSE名前空間を。実行できる唯一のことは、using namespace
-statementをブロックしてそのスコープを制限することです。
例:
{
using namespace xyzzy;
} // stop using namespace xyzzy here
自動生成されたヘッダーで使用されるテンプレートを変更できるかもしれません。
今後の参考のために:XEバージョン以降、恐ろしいusing namespace System;
intを回避するために#defineできる新しい値があります:DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE
ビルドプロセスの一部としてsed、perl、またはその他のコマンドラインツールを使用して、生成されたヘッダーを生成された後、使用される前に変更するのはどうですか?
#include<iostream>
#include<stdio.h>
namespace namespace1 {
int t = 10;
}
namespace namespace2 {
int t = 20;
}
int main() {
using namespace namespace1;
printf("%d" , t);
printf("%d" , namespace2::t);
}