С using namespace
Я делаю целое содержание того пространства имен непосредственно видимым, не используя спецификатор пространства имен. Это может вызвать проблемы если using namespace
происходит в широко используемых заголовках - мы можем непреднамеренно сделать два пространства имен с идентичными именами классов видимыми, и компилятор откажется компилировать, если имя класса не будет предварительно ожидаться со спецификатором пространства имен.
Я могу отменить using namespace
так, чтобы компилятор забыл, что видел его ранее?
Нет, но вы можете сказать Ваши коллеги, которые вы никогда не должны иметь , используя директиву или декларацию
или декларацию в заголовке.
Не насколько мне известно ... но как правило, я использую только «Использование пространства имен» в файлах .CPP.
Нет, стандарт C ++ не говорит о «отменить». Лучше всего вы можете сделать, это ограничить объем , используя
:
#include <vector>
namespace Ximpl {
using namespace std;
vector<int> x;
}
vector<int> z; // error. should be std::vector<int>
, но, к сожалению, с использованием пространства имен XIMPL
принесет все имена из STD
пространства имен.
Как говорили другие, вы не можете, и проблема не должна быть там вообще.
Следующее, что вы можете сделать, это ввести необходимые символы так, чтобы они были предпочтительнее при поиске имени:
namespace A { class C {}; }
namespace B { class C {}; }
using namespace A;
using namespace B;
namespace D {
using A::C; // fixes ambiguity
C c;
}
В некоторых случаях вы также можете заключить оскорбительные включения в пространство имен :
namespace offender {
# include "offender.h"
}