あなたは、名前空間を汚染すると仮定して間違っています。using namespace
機能は、この種の用途のために正確に作成されました。
using namespace
が宣言されている範囲を「汚染」するだけで、この場合のメリット(演算子を使用する)は欠点よりはるかに大きくなります(この「汚染」は、範囲)。例えば
、あなたが持っている可能性があり:
void foo()
{
// no symbol of boost::assign is polluting here
std::vector tmp;
{
using namespace boost::assign ;
// brings in this scope all the symbols of boost::assign
tmp += "abc","def","asdf","foo","blah","dfkef";
}
// no symbol of boost::assign is polluting here
}
あなたはそれを超える持って来ることができるusing namespace
し、潜在的な汚染によってもたらされたシンタックスシュガーとの間のバランスを決定する必要があります。
良い妥協点が面白いサイドノートとして機能本体にそれを制限する、または、あなたは私と同じ妄想している場合は、ちょうどこの
using
文のスコープを作成...
する可能性があり
、最悪の解決策は、エクスポートされたシンボルを使用してパブリックヘッダに使用することです。
私はあなたの関数が 'using'ステートメントのスコープを導入できるところで十分に大きければ、あなたの関数を分割しなければならないか、あなたの基準が厳しくなり、usingステートメントは残りの関数スコープを導入する意味はありません。 – GManNickG
@GMan:あなたが正しいと思います。これは、「機能的なボディに限定するのが良い妥協である」とスコープを書くことが「編集的」なのである理由を書いた理由です。^^^.... – paercebal
あなたはそうです。私は割り当てのヘッダーファイルを見て、定義が非常に最小限であるように見えますが、私は部分的にこの方法で名前空間を使いやすくすると思います。 –