Замучался. Есть ли какое-нибудь идеальное решение при использовании стандартных классов, определенных в неймспейсах?
Можно писать каждый раз с префиксом:
std::string str_;
__gnu_cxx::hash_map map_;
Это долго, громоздко, нечитабельно (и подозреваю, что с __gnu_cxx могут быть проблемы на других компиляторах - тогда все равно придется определять его где-то в одном месте).
Можно писать using std::string, using __gnu_cxx::hash_map. Хоть сам код выглядит лучше, это тоже криво. К тому-же, я пишу библиотеку и использовать using в ее хедерах значит подкладывать змею тому, кто библиотеку юзает. Неужели пихать эти using в каждый класс?
Можно писать using namespace std - но это совсем плохо. Я уже нарывался на косяки с засорением namespace'ов, да и сколько их может быть? std, __gnu_cxx, boost, ... Ужас. Опять же проблема с использованием этого в хедерах.
Можно было бы в один хедер свалить все инклуды и using того что надо. Но подозреваю, что это будет долго собираться и, опять же, проблема, если кто-то будет пользоваться моей либой.
Как быть-то? Подозреваю, что придется писать все с префиксами, а очень не хочется... Было бы неплохо сделать макрос со всеми using и использовать его в начале определения каждого класса и в .cc. Проблем не было бы, но тогда нужно опять же include'ить все.
Можно сделать что-то вроде
#ifdef _GLIBCXX_STRING
using std::string
#endif
но это в макрос не запихнешь и сдается мне получится карточный домик.
В общем, п%%дец. Писать с префиксами и не трахать мозг?
Похожие темы
- Форум [clisp] namespaces (2010)
- Форум namespace dovecot (2017)
- Форум C namespaces (2017)
- Форум Nested namespaces (2014)
- Форум Tcl namespaces (2009)
- Форум java namespace (2008)
- Форум какой namespace? (2004)
- Форум Namespace в xml.etree (2012)
- Форум extern namespace C++ (2012)
- Форум ipset & namespace/lxc (2013)