Вы ошибаетесь, предполагая, что это загрязнит пространство имен: функция 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
оператора ...
Как забавное примечание, худшее решение - поместить использование в публичный заголовок с экспортированными символами.