Я согласен с другими - это требует столкновения имен, двусмысленности, а затем факт менее явный. Хотя я могу видеть использованиеusing
, мое личное предпочтение - ограничить его. Я также настоятельно рассмотрел бы то, на что указали некоторые другие:
Если вы хотите найти имя функции, которое может быть довольно распространенным именем, но вы хотите найти его только в std
пространстве имен (или наоборот - вы хотите изменить все вызовы, которые не находятся в пространстве имен std
, пространстве имен 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;
}
Я не буду спорить о том, что это плохая идея или нет. Однако я буду утверждать, что он поддерживает его в чистоте для моего проекта и в то же время делает его конкретным: правда, я должен использовать Boost, но я использую его так, как в итоге у libstdc ++. Да, начинать собственный проект и начинать со стандартного (...) в самом начале очень долгий путь, помогая сопровождению, развитию и всему, что связано с проектом!
Просто чтобы прояснить кое-что: на самом деле я не думаю, что было бы хорошей идеей использовать имя класса / что-либо в STL намеренно и более конкретно вместо. Строка является исключением (игнорируйте первое, выше или второе здесь, каламбур, если нужно) для меня, так как мне не понравилась идея «String».
На самом деле, я все еще очень склонен к С и склонен к С ++. Щадящие детали, большая часть того, над чем я работаю, больше подходит для C (но это было хорошее упражнение и хороший способ заставить себя а. Изучать другой язык и б) стараться не быть менее предвзятым по отношению к объекту / классам / и т. Д., Что, возможно, лучше сформулировано как менее закрытый, менее высокомерный и более восприимчивый.) Но что является полезным является то , что некоторые из них уже предложили: Я действительно использовать список (это довольно общий характер , не так ли?), И вида ( то же самое) , чтобы назвать два , что вызвало бы конфликт имен , если бы я сделать using namespace std;
, и так С этой целью я предпочитаю быть конкретным, контролировать и знать, что, если я намерен использовать его как стандартное использование, мне придется его указать. Проще говоря: не предполагая, допускается.
А что касается того, чтобы сделать регулярное выражение Boost частью std
. Я делаю это для будущей интеграции и - опять же, я полностью признаю, что это предвзятость - я не думаю, что это так уродливо, как boost::regex:: ...
. На самом деле, это другое для меня. В C ++ есть много вещей, которые мне еще предстоит полностью принять во взглядах и методах (другой пример: шаблоны с переменным числом аргументов против аргументов var [хотя я допускаю, что шаблоны с переменным числом аргументов очень и очень полезны!]). Даже те, которые я принимаю, были трудными, и у меня все еще есть проблемы с ними.