Я могу отменить эффект “использования пространства имен” в C++?

С using namespace Я делаю целое содержание того пространства имен непосредственно видимым, не используя спецификатор пространства имен. Это может вызвать проблемы если using namespace происходит в широко используемых заголовках - мы можем непреднамеренно сделать два пространства имен с идентичными именами классов видимыми, и компилятор откажется компилировать, если имя класса не будет предварительно ожидаться со спецификатором пространства имен.

Я могу отменить using namespace так, чтобы компилятор забыл, что видел его ранее?

31
задан sharptooth 28 January 2010 в 07:23
поделиться

4 ответа

Нет, но вы можете сказать Ваши коллеги, которые вы никогда не должны иметь , используя директиву или декларацию или декларацию в заголовке.

37
ответ дан 27 November 2019 в 22:07
поделиться

Не насколько мне известно ... но как правило, я использую только «Использование пространства имен» в файлах .CPP.

3
ответ дан 27 November 2019 в 22:07
поделиться

Нет, стандарт C ++ не говорит о «отменить». Лучше всего вы можете сделать, это ограничить объем , используя :

#include <vector>

namespace Ximpl {

using namespace std;    
vector<int> x;

}

vector<int> z; // error. should be std::vector<int>

, но, к сожалению, с использованием пространства имен XIMPL принесет все имена из STD пространства имен.

6
ответ дан 27 November 2019 в 22:07
поделиться

Как говорили другие, вы не можете, и проблема не должна быть там вообще.
Следующее, что вы можете сделать, это ввести необходимые символы так, чтобы они были предпочтительнее при поиске имени:

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"
}
16
ответ дан 27 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: