Все остальное, что я видел до сих пор в стандартной библиотеке C ++, находится в std
Пространство имен. Если я использую вещи из std::chrono
Я обычно превышаю свой предел 80 символов на строку — это не проблема, просто неудобно.
Итак, вот мой простой вопрос: почему заголовок chrono имеет свое собственное пространство имен?
Я был ведущим автором на хронографическое предложение. Подмножество имен не было моим первым выбором, просто из-за многословия. Я пишу using namespace std::chrono
почти каждый раз, когда я использую средство.
Однако это было очень спорное предложение. И многие люди, в том числе некоторые из моих соавторов, твердо чувствовали, что подмножество имен является подходящим. Я не сильно возражал против подпространства имен, потому что мы были вынуждены идти на компромисс или становиться такими же тупиковыми, как конгресс США. : -) Результатом такого тупика, вероятно, был С11 timespec
,
boost экспериментировал с подпространствами имен гораздо более агрессивно, чем std, и один из ключевых авторов этой статьи также является автором библиотеки даты и времени boost, на основе которой возник хронограф. Так что это, очевидно, сильно повлияло бы на использование подпространства имен.
Заглядывая вперед, вполне возможно, что подпространство имен станет абсолютно необходимым. Представьте себе, если мы добавим календари, включающие аббревиатуру для декабря: dec
, Это будет напрямую конфликтовать с:
ios_base& dec(ios_base& str);
в <ios>
, В общем, я, вероятно, был неправ, не настаивая на подпространстве имен с самого начала. : -) В дальнейшем будет интересно посмотреть, где комитет создает и не создает подпространства имен.
Обновление (6 лет спустя …)
Правда всегда страннее, чем вымысел …
Так что я сделал предложить std::chrono::dec
как сокращение для December
, думая, что это будет безопасно из-за вложенного chrono
Пространство имен. Но нет, комитет решил переименовать std::chrono::dec
в std::chrono::December
в процессе стандартизации из-за потенциальных конфликтов.
Так стоят ли вложенные пространства имен?
Я не знаю. Это обновление — точка данных, а не мнение.
Есть и другие пространства имен, такие как std::placeholders
, В конечном счете, в C ++ 03 Комитет не использовал подпространства имен, но теперь до боли очевидно, что std
Пространство имен становится сильно перегруженным. Таким образом, я ожидаю, что многие предложения по библиотекам для C ++ 14 будут использовать подпространство имен для более крупных организаций компонентов.