jestem stwierdzenia, że co ja za „najlepsze praktyki” do użycia nazw w C++ boli czytelności mojego kodu, a co mnie pytanie jak z nich korzystać również.C++ nazw najlepszych praktyk dylemat
Mój program składa się z kilku różnych modułów, które są najczęściej budowane w bibliotekach, że „głównym” aplikacja używa. Każda biblioteka używa własnej przestrzeni nazw, a ich przestrzenie nazw są "wewnątrz" przestrzeni nazw projektu, aby pomóc w projektowaniu przeciwko konfliktom nazw z kodem firm trzecich. Tak więc kończę z nazwami klas, takimi jak "myproject :: logging :: Logger" i "myproject :: reporting :: ReportType" (Jak wymyślono przykłady).
tej pory tak dobrze. A w moich plikach .cpp nie mam problemu. Używam "using myproject :: logging" na przykład na górze strony i mogę bez problemu odnieść się do mojej klasy Logging. W mało prawdopodobnym przypadku konfliktu między dwiema moimi przestrzeniami nazw mogę wprost powiedzieć, który z nich chcę. To działa dobrze.
Pliki nagłówkowe są różne choć. Uważa się za złą praktykę umieszczanie instrukcji użycia w plikach nagłówkowych, ponieważ wpłyną one na niepowiązany kod, który może ich nie oczekiwać. Dlatego zawsze w pełni kwalifikuję wszystkie nazwy w plikach .hpp. To było trochę brzydkie, ale do tej pory było to możliwe, więc zniosłem to. Ale teraz zwiększam używanie kodu szablonu w moich bibliotekach, co oznacza, że jest teraz o wiele więcej aktualnego kodu w moich plikach .hpp. A całkowite zakwalifikowanie każdego nazwiska powoduje, że kod jest praktycznie nieczytelny ze względu na długość nazw typów.
Zaczynam odczuwać, że korzyści wynikające z używania przestrzeni nazw i najlepszych praktyk w ich używaniu zaczynają być przeważane przez nieodwracalny kod, który muszę napisać. Zaczynam się zastanawiać, czy lepiej byłoby zrezygnować z używania przestrzeni nazw, aby zyskać korzyść z bardziej czytelnego kodu i naprawić konflikty nazw, jeśli i kiedy się pojawią.
Alternatywą jest użycie krótkich, jednowarstwowych przestrzeni nazw, więc zamiast "myproject :: logging :: Logger" miałbym tylko "log :: Logger", co bardzo by pomogło, ale znacznie zwiększyłoby prawdopodobieństwo konfliktów przestrzeni nazw. , a także mają przestrzenie nazw przekazują mniej użytecznych informacji.
Jak mówiłem, to tylko naprawdę wpływa kod w plikach .hpp jak ja szczęśliwie używając „używając nazw” w moich plikach wdrożeniowych aby łatwiej zarządzać, ale jest staje się problemem, jak patrzę na moja matrycy kod w plikach .hpp teraz i myśleć „eww ....”, który nie może być dobre: P
ktoś ma jakieś praktyczne porady?
'dyrektyw using' są scoped, więc może można dokonać pewnych Shorthands przestrzeni nazw, które nie przeciekają na zewnątrz pliku nagłówka? –