Я согласен с другими - это требует столкновения имен, двусмысленности, а затем факт менее явный. Хотя я вижу использование using
, я предпочитаю ограничить его. Я также настоятельно рассмотрел бы то, на что указали некоторые другие:
Если вы хотите найти имя функции, которое может быть довольно распространенным именем, но вы хотите найти его только в пространстве имен std
(или наоборот - вы хотите изменить все вызовы, которые НЕ находятся в пространстве имен std
, namespace X
, ...), тогда как вы предлагаете это сделать? Вы могли бы написать программу для этого, но не лучше ли потратить время на работу над самим проектом, чем на написание программы для поддержки вашего проекта?
Лично я на самом деле не против префикса std::
. Мне больше нравится внешний вид, чем отсутствие его. Я не знаю, так ли это, потому что это явно и говорит мне: «Это не мой код ... Я использую стандартную библиотеку» или это что-то еще, но я думаю, что это выглядит лучше. Это может быть странно, учитывая, что я только недавно вошел в C ++ (использовал и все еще использую C и другие языки гораздо дольше, и C - мой любимый язык всех времен, прямо над сборкой).
Есть еще одна вещь, хотя она в некоторой степени связана с вышеизложенным и тем, на что указывают другие. Хотя это может быть плохой практикой, я иногда резервирую std::name
для стандартной версии библиотеки и название для конкретной реализации программы. Да, действительно, это может укусить вас и укусить вас сильно, но все сводится к тому, что я начал этот проект с нуля, и я единственный программист для него. Пример: я перегружаю std::string
и называю это string
. У меня есть полезные дополнения. Я сделал это частично из-за моей склонности C и Unix (+ Linux) к именам в нижнем регистре.
Кроме того, у вас могут быть псевдонимы пространства имен. Вот пример того, где это полезно, на которое, возможно, не ссылались. Я использую стандарт C ++ 11 и специально с libstdc ++. Ну, у него нет полной поддержки std::regex
. Конечно, он компилируется, но он выдает исключение, так как это ошибка программиста. Но это недостаток реализации. Вот как я это решил. Установите регулярное выражение Boost, свяжите его. Затем я делаю следующее, чтобы, когда libstdc ++ полностью его реализовал, мне нужно было только удалить этот блок, а код остался прежним:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
Я не буду спорить о том, плохая это идея или нет. Я, однако, буду утверждать, что он сохраняет его чистым для МОЕГО проекта и в то же время делает его конкретным: True, я должен использовать Boost, НО я использую его так, как в итоге у libstdc ++. Да, начинать собственный проект и начинать со стандартного (...) в самом начале очень долгий путь, помогая сопровождению, развитию и всему, что связано с проектом!
Изменить:
Теперь у меня есть время, чтобы кое-что прояснить. На самом деле я не думаю, что было бы хорошей идеей использовать имя класса / что-либо в STL намеренно и более конкретно вместо. Строка является исключением (игнорируйте первое, выше или второе здесь, каламбур, если нужно) для меня, так как мне не понравилась идея «String». На самом деле, я все еще очень склонен к С и склонен к С ++. Щадящие детали, большая часть того, над чем я работаю, больше подходит для C (но это было хорошее упражнение и хороший способ заставить себя а. Изучать другой язык и б) стараться не быть менее предвзятым по отношению к объекту / классам / и т. Д., Что, возможно, лучше сформулировано как менее закрытый, менее высокомерный, более принимающий.) Но что полезно, так это то, что некоторые уже предложили: я действительно использую list (это довольно универсально, не так ли?), Sort (то же самое), чтобы назвать два, которые вызвали бы конфликт имен, если бы я сделал using namespace std;
и поэтому для этого я предпочитаю быть конкретным, контролировать и знать, что если я намерен использовать его как стандартное использование, мне придется его указать. Проще говоря: не предполагая, разрешено.
А что касается включения регулярного выражения Boost в std
. Я делаю это для будущей интеграции и - опять же, я полностью признаю, что это предвзятость - я не думаю, что это так уродливо, как boost::regex:: ...
На самом деле это для меня другое. В C ++ есть много вещей, которые мне еще предстоит полностью принять во взглядах и методах (еще один пример: шаблоны с переменными значениями по сравнению с аргументами var [хотя я допускаю, что шаблоны с переменными числами очень и очень полезны!]). Даже тем, кого я принимаю, было трудно, и у меня все еще есть проблемы с ними.