Переименование пространств имен

#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;
  

Пример в Ideone.

Или, если вы действительно хотите реальный псевдоним:

 namespace on = one::nested;
  

Пример в Ideone.

Комментарии:

1. Второе намного лучше первого… первый вариант не создает псевдоним, а скорее переносит символы из другого пространства имен, и это может привести к конфликтам имен или нежелательным результатам (если перегрузка функции в nested пространстве имен соответствует лучше, чем перегрузка в текущем пространстве имен, он внезапно изменит свой выбор)

2. @David: Да, но, похоже, это решает проблему, с которой, похоже, сталкивается OP. 🙂

Ответ №2:

Это:

 namespace old = newns::nested;
  

казалось бы, это то, что вы хотите.