Przerzuciłem się z C ++ na Javę i C # i uważam, że użycie przestrzeni nazw / pakietów jest tam znacznie lepsze (dobrze zorganizowane). Potem wróciłem do C ++ i próbowałem użyć przestrzeni nazw w ten sam sposób, ale wymagana składnia jest okropna w pliku nagłówkowym.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Poniższe również wydaje mi się dziwne (aby uniknąć głębokiego wcięcia):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Czy istnieje krótszy sposób wyrażenia powyższej rzeczy? Brakuje mi czegoś takiego
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Aktualizacja
Ok, niektórzy twierdzą, że koncepcja użycia w Javie / C # i C ++ jest inna. Naprawdę? Myślę, że (dynamiczne) ładowanie klas nie jest jedynym celem przestrzeni nazw (jest to bardzo techniczna perspektywa). Dlaczego nie miałbym go używać ze względu na czytelność i strukturę, np. Pomyśl o „IntelliSense”.
Obecnie nie ma logiki / spoiwa między przestrzenią nazw a tym, co można tam znaleźć. Java i C # robią to znacznie lepiej ... Po co dołączać <iostream>
i mieć przestrzeń nazw std
? Ok, jeśli powiesz, że logika powinna opierać się na nagłówku, dlaczego #include nie używa przyjaznej składni „IntelliSense”, takiej jak #include <std::io::stream>
lub <std/io/stream>
? Myślę, że brakująca strukturalizacja w domyślnych bibliotekach jest jedną ze słabości C ++ w porównaniu z Javą / C #.
Jeśli wyjątkowość dla zajadłych konfliktów jest jednym punktem (który jest także punktem C # i Java), dobrym pomysłem jest użycie nazwy projektu lub nazwy firmy jako przestrzeni nazw, nie sądzisz?
Z jednej strony mówi się, że C ++ jest najbardziej elastyczny ... ale wszyscy mówili „nie rób tego”? Wydaje mi się, że C ++ może robić wiele rzeczy, ale ma okropną składnię, nawet w przypadku najłatwiejszych rzeczy w wielu przypadkach w porównaniu z C #.
Zaktualizuj 2
Większość użytkowników twierdzi, że tworzenie zagnieżdżenia głębszego niż dwa poziomy jest nonsensem. Ok, a co z przestrzeniami nazw Windows :: UI :: Xaml i Windows :: UI :: Xaml :: Controls :: Primitives w programowaniu pod Win8? Myślę, że użycie przestrzeni nazw przez Microsoft ma sens i jest rzeczywiście głębsze niż tylko 2 poziomy. Myślę, że większe biblioteki / projekty wymagają głębszego zagnieżdżenia (nienawidzę nazw klas, takich jak ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... wtedy też możesz umieścić wszystko w globalnej przestrzeni nazw).
Aktualizacja 3 - Zakończenie
Większość mówi „nie rób tego”, ale ... nawet wzmocnienie ma głębsze zagnieżdżenie niż jeden lub dwa poziomy. Tak, jest to biblioteka, ale: Jeśli chcesz kod wielokrotnego użytku - traktuj swój własny kod jak bibliotekę, którą dałbyś komuś innemu. Używam też głębszego zagnieżdżenia do celów wykrywania przy użyciu przestrzeni nazw.
namespace
słowa kluczowego?