Моя библиотека использует несколько вложенных пространств имен, представленных следующим образом:
Library name
Class name 1
Class name 2
Class name 3
[...]
Utilities
Class name 1
[...]
Class name 2
[...]
Class name 3
[...]
[...]
Пространство имен «Utilities» содержит полезные расширения для каждого из классов, которые не требуют быть включенным в сам класс.
Пространство имен «Имя библиотеки» необходимо, потому что оно позволяет избежать серьезных конфликтов с другими библиотеками, пространство имен «Утилиты» необходимо, чтобы избежать неоднозначности, которая возникает из таких вещей , и «Класс» name "внутри него избегают конфликтов имен между утилитами, написанными для аналогичных классов.
Несмотря на это, на практике все еще возникают огромные проблемы. Возьмем, к примеру, следующее:
MyLibrary::MyContainer<int> Numbers = MyLibrary::Utilities::MyContainer::Insert(OtherContainer, 123, 456);
// Oh God, my eyes...
Это заставляет меня думать, что я делаю что-то серьезно неправильно. Есть ли более простой способ сделать вещи организованными, интуитивно понятными и недвусмысленными?