Можно ли вернуться обратно к & quot; умолчанию & quot; глобальное пространство имен?

В основном я работаю с некоторыми предоставленными заголовочными файлами в следующем формате:

#include <iostream>

using namespace std;

class bar
{
public:
void printSomething(void)
{
cout << "This is an example." << endl;
}
}

У меня вопрос, так как я не могу изменить предоставленный заголовок, как я могу удалить std пространство имен в моих файлах и вернуться к глобальному пространству имен по умолчанию? Я пытался «using namespace ::;» а также «using namespace ;«, но компилятор не в восторге ни от одного из них. Любые идеи о том, как заставить чистый лист с пространствами имен?

3

Решение

Ты не можешь Вот почему using namespace пункт так evul. Вы можете включить эти заголовки в другое пространство имен:

namespace bleh {
#include "library_that_uses_evul_using_namespace.h"}

Это будет загрязнять только bleh Пространство имен.

7

Другие решения

Вы не можете избавиться от «использования пространства имен». Вы можете иметь несколько операторов «using namespace», и они являются аддитивными.

Однако вы можете заключить вредоносный заголовок в собственное пространство имен:

namespace Crap
{
#include "maliciousHeader.h"}

Таким образом, «использование пространства имен std» применимо только к пространству имен Crap. Я бы рекомендовал поместить приведенный выше код в другой заголовок, который является заголовком, который вы фактически включаете в свою программу.

4

По вопросам рекламы [email protected]