Я погоджуюся з іншими - це вимагає сутичок з іменами, неоднозначностей, і тоді факт є менш явним. Хоча я бачу використання 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 (хоча я визнаю, що варіативні шаблони дуже корисні!)). Навіть ті, що я приймаю, були важкими, і у мене все ще є проблеми з ними.