#c #header #namespaces
#c #заголовок #пространства имен
Вопрос:
Допустим, у меня есть пространство имен:
namespace UI
{
}
И у меня есть другое пространство имен:
namespace Domain
{
}
Теперь предположим, что в пространстве имен домена у меня также есть пространство имен пользовательского интерфейса, специфичное для этого домена.
namespace Domain
{
namespace UI
{
}
}
Возможно ли импортировать глобальное пространство имен пользовательского интерфейса в пространство имен пользовательского интерфейса домена, не импортируя его в пространство имен домена? Я знаю, что использование пространства имен часто не является хорошей идеей, но концептуально пространство имен пользовательского интерфейса домена должно быть как в глобальном пространстве имен пользовательского интерфейса, так и в пространстве имен домена.
Ответ №1:
Единственно возможными способами являются псевдонимы пространства имен или использование всего пользовательского интерфейса пространства имен в Domain::UI. В обоих случаях есть способ получить к нему доступ из пространства имен домена.
Примеры:
namespace UI {
class Test {
};
}
namespace Domain {
}
namespace Domain {
namespace UI {
namespace _UI = ::UI;
struct Test2 {
_UI::Test param;
};
}
}
namespace Domain2 {
namespace UI {
using namespace ::UI;
struct Test2 {
Test param;
};
}
}
Комментарии:
1. да, точно, используйте ::UI при обращении к глобальному пространству имен.
2. Вау, у вас могут быть псевдонимы пространств имен, я даже не знал об этом. Еще один вопрос, если я использую 2-е решение для заголовка, импортирует ли это глобальный пользовательский интерфейс для всех применений пространства имен пользовательского интерфейса домена?
3. Нет, работает только с файлами, включающими «using namespace ::UI» или файлами, включающими заголовок с использованием. Пространство имен в C работает не так, как, например, пакеты в Go. Если у вас нет заголовка, определяющего что-либо, для этого нет видимости.