#c #namespaces #alias
#c #пространства имен #псевдоним
Вопрос:
Я занимаюсь C уже давно, но только сегодня утром столкнулся с вопросом, на который не смог дать ответ: «Возможно ли создавать псевдонимы для пространств имен в C ?»
Позвольте мне привести пример. Допустим, у меня был следующий заголовок:
namespace old
{
class SomeClass {};
}
Которое по неуказанным причинам должно было стать:
namespace _new
{
namespace nested
{
class SomeClass {}; // SomeClass hasn't changed
}
}
Теперь, если у меня есть старая кодовая база, которая ссылается на SomeClass
, я могу быстро (и грязно) «исправить» изменение, добавив:
namespace old
{
typedef _new::nested::SomeClass SomeClass;
}
Но есть ли способ импортировать все из _new::nested
в old
без необходимости typedef
указывать явно каждый тип?
Что-то похожее на Python import * from ...
.
Спасибо.
Комментарии:
1.
new
возможно, это плохой пример для имени пространства имен. 😉
Ответ №1:
using namespace new::nested;
Или, если вы действительно хотите реальный псевдоним:
namespace on = one::nested;
Комментарии:
1. Второе намного лучше первого… первый вариант не создает псевдоним, а скорее переносит символы из другого пространства имен, и это может привести к конфликтам имен или нежелательным результатам (если перегрузка функции в
nested
пространстве имен соответствует лучше, чем перегрузка в текущем пространстве имен, он внезапно изменит свой выбор)2. @David: Да, но, похоже, это решает проблему, с которой, похоже, сталкивается OP. 🙂
Ответ №2:
Это:
namespace old = newns::nested;
казалось бы, это то, что вы хотите.