Управление версиями пространства имен C ++ - PullRequest
4 голосов
/ 12 мая 2011

В C ++ возможно сделать следующее для управления версиями пространства имен

Первая версия:

namespace A__v1 {
  class X ...
  class Y ...
  class Z ...
}
namespace A = A__v1

Вторая версия (где изменяется класс X):

namespace A__v1 {
  class X ...
  class Y ...
  class Z ...
}
namespace A__v2 {
  class X ...
  using A__v1::Y;
  using A__v1::Z;
}
namespace A = A__v2

Что я хотел бы знать, стоит ли это усилий?Действительно ли это добавляет преимущества вашему приложению / библиотеке при изменении внутренних элементов пространства имен?

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Мне действительно нравится немакро-способ обработки этого, он позволяет одной сборке библиотеки обслуживать много версий. Это неизбежно увеличит размер библиотеки (из-за присутствия большего количества версий некоторых классов), но есть одно предостережение: компилятор, скорее всего, сообщит полную квалификацию пространства имен классов, делая пользователя вашей библиотеки, который этого не делает. знать о вашей нестандартной схеме управления версиями очень запутано.

Если подумать, я также не вижу смысла в предоставлении двух версий одной и той же вещи в одной сборке библиотеки, за исключением случаев, когда задействованы разные процессоры / архитектуры, но я не думаю, что это то, что вы получаете в. Хранение старых версий классов не является умным, люди никогда не переключатся на более новые, если им это не нужно, и если что-то (наполовину) устареет, вы удалите то, что было «частью библиотеки». так сказать.

1 голос
/ 12 мая 2011

Это хороший трюк и довольно полезный, но есть некоторые проблемы, о которых нужно знать. В основном, вы не можете специализировать шаблон, используя имя A для пространства имен.

C ++ 0X имеет встроенные пространства имен, которые были разработаны для лучшей обработки.

0 голосов
/ 12 мая 2011

библиотека может быть непростой задачей для программистов, которые будут использовать это пространство имен, может быть, лучше использовать отдельные пространства имен независимо, чтобы иметь значение.

...