Zgadzam się z innymi - żąda konfliktów nazw, dwuznaczności, a faktem jest, że jest mniej wyraźny. Chociaż widzę użycie using
, moim osobistym wyborem jest ograniczenie go. Chciałbym również mocno rozważyć to, co zauważyli inni:
Jeśli chcesz znaleźć nazwę funkcji, która może być dość popularną nazwą, ale chcesz ją znaleźć tylko w std
przestrzeni nazw (lub odwrotnie - chcesz zmienić wszystkie wywołania, które nie znajdują się w przestrzeni nazw std
, przestrzeni nazw X
, ...), to jak proponujesz to zrobić?
Możesz napisać program, aby to zrobić, ale czy nie lepiej byłoby poświęcić czas na pracę nad samym projektem, niż na pisanie programu do obsługi projektu?
Osobiście nie mam nic przeciwko temu std::
prefiksowi. Lubię ten wygląd bardziej niż brak go. Nie wiem, czy to dlatego, że jest jawne i mówi mi „to nie jest mój kod ... używam standardowej biblioteki”, czy jest to coś innego, ale myślę, że wygląda to ładniej. To może być dziwne, biorąc pod uwagę, że dopiero niedawno dostałem się do C ++ (używałem i nadal gram w C i innych językach znacznie dłużej, a C jest moim ulubionym językiem wszechczasów, zaraz po asemblerze).
Jest jeszcze jedna rzecz, chociaż jest ona nieco związana z powyższym i tym, na co wskazują inni. Chociaż może to być złą praktyką, czasami rezerwuję std::name
standardową wersję biblioteki i nazwę dla implementacji specyficznej dla programu. Tak, może to cię ugryźć i mocno ugryźć, ale wszystko sprowadza się do tego, że rozpocząłem ten projekt od zera i jestem jedynym programistą. Przykład: przeciążam std::string
i nazywam to string
. Mam pomocne dodatki. Zrobiłem to częściowo z powodu mojej skłonności do C i Unixa (+ Linux) do małych liter.
Poza tym możesz mieć aliasy przestrzeni nazw. Oto przykład przydatnego zastosowania, do którego nie można było się odwoływać. Korzystam ze standardu C ++ 11, a konkretnie z libstdc ++. Cóż, nie ma pełnego std::regex
wsparcia. Jasne, kompiluje się, ale zgłasza wyjątek w postaci błędu po stronie programisty. Ale to brak wdrożenia.
Oto jak to rozwiązałem. Zainstaluj regex Boosta i połącz go. Następnie wykonuję następujące czynności, aby po całkowitym wdrożeniu libstdc ++ potrzebowałem tylko usunąć ten blok, a kod pozostanie taki sam:
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;
}
Nie będę się kłócił, czy to zły pomysł, czy nie. Będę jednak argumentować, że utrzymuje go w czystości dla mojego projektu, a jednocześnie czyni go konkretnym: To prawda, muszę użyć Boosta, ale używam go tak, jakby libstdc ++ go w końcu miał. Tak, rozpoczęcie własnego projektu i rozpoczęcie od standardowego (...) na samym początku bardzo pomaga w utrzymaniu, rozwoju i we wszystkim, co jest związane z projektem!
Żeby coś wyjaśnić: nie sądzę, że dobrym pomysłem jest używanie nazwy klasy / czegokolwiek w STL celowo i bardziej konkretnie zamiast. Ciąg jest dla mnie wyjątkiem (zignoruj pierwszy, powyżej lub drugi tutaj, pun, jeśli musisz) dla mnie, ponieważ nie podobał mi się pomysł „String”.
W tej chwili jestem nadal bardzo stronniczy w stosunku do C i stronniczy w stosunku do C ++. Oszczędzanie szczegółów, większość tego, nad czym pracuję, bardziej pasuje do C (ale było to dobre ćwiczenie i dobry sposób, aby a. Nauczyć się innego języka i b. Starać się nie być mniej stronniczy w stosunku do obiektów / klas / itp., Co może lepiej powiedzieć jako mniej zamknięte, mniej aroganckie i bardziej akceptujące). Ale to, co jest użyteczne, co niektórzy już zaproponował: I rzeczywiście używają listy (jest dość ogólny, prawda?), A sort (samo), aby wymienić tylko dwa, które spowodowałyby nazwę starcia gdybym miał zrobić using namespace std;
, i tak w tym celu wolę być konkretny, kontrolować i wiedząc, że jeśli zamierzam być standardowym zastosowaniem, będę musiał to określić. Mówiąc wprost: żadne założenie nie jest dozwolone.
A jeśli chodzi o włączenie wyrażenia regularnego Boost std
. Robię to w celu przyszłej integracji i - ponownie, w pełni przyznam, że to stronniczość - nie sądzę, aby było tak brzydkie jak boost::regex:: ...
. Rzeczywiście, to dla mnie kolejna rzecz. W C ++ jest wiele rzeczy, które muszę jeszcze zaakceptować w wyglądzie i metodach (inny przykład: szablony variadic kontra var argumenty [choć przyznaję, że szablony variadic są bardzo przydatne!]). Nawet te, które akceptuję, były trudne i nadal mam z nimi problemy.