![](https://habrastorage.org/storage2/da7/ad1/34d/da7ad134d4534cc5cdf378f6eba65785.jpg)
При написании библиотеки на C++ многие сталкиваются с определенными трудностями при написании и организации кода. У некоторых уже есть готовые решения, у других их нет и они пытаются найти эти решения.
Некоторые трудности при написании кода библиотеки, в большей степени касающиеся «самодокументирования», можно решить с помощью «рабочих» пространств имен.
Для начала, опишем эти трудности и представим обычные способы решения.
Предположим, что библиотека реализует некоторую сущность
some_class, которую она предоставляет пользователю библиотеки. Определение
some_class зависит от другой сущности библиотеки
detail_class, которая является частью реализации и пользователю не предоставляется. Библиотека поставляется только в виде заголовочных файлов.