Во-первых, и, возможно, наиболее безопасно, вы можете явно квалифицировать поиск в глобальной области видимости, добавив к имени префикс с унарным оператором области действия ::
:
::classFromB foo(/*...*/);
::globalFuncFromB( foo, &::globalVarFromB ); // Obviously this gets rather tedious.
Во-вторых, предполагая, что нет using
директивы (using namespace A;
) или декларации (using conflictsWithB = A::className
), или другие декларации создают конфликт, вы можете, как правило, полагаться на неквалифицированный поиск:
classFromB foo(/*...*/);
globalFuncFromB( foo, &globalVarFromB );
Наконец, вы можете обернутьвсе содержимое включенного файла в пространстве имен:
namespace B {
#include "B.hpp"
}
Это имеет множество потенциальных проблем, особенно если предполагается, что любые объявления в B.hpp определены или фактически определены либо в самом заголовке, либо в другом месте (реализация B.cpp?) в глобальном масштабе.Не лучшая идея, но иногда полезная. Будьте очень осторожны, если рассмотрите этот подход.