2009-12-23 17 views
5

Czy możliwe jest stworzenie znajomego klasy przestrzeni nazw, np. Mam przestrzeń nazw testu jednostkowego z wieloma klasami i chciałem, aby przestrzeń nazw testowa była przyjacielem klasy, aby miała dostęp do prywatnych szczegółów implementacji.Interakcja przestrzeni nazw i znajomych w C++?

Odpowiedz

1

Nie, nie jest to możliwe w C++. Szczerze mówiąc, ma on kiepski design.

+1

Dlaczego mówisz, że to zły projekt? Myślę, że można to zrobić i być przydatne. Nie ma dużej różnicy między klasą a przestrzenią nazw, z wyjątkiem tego wskaźnika. Nie widzę powodu, dla którego deklaracja przyjaciela nie mogłaby działać dla przestrzeni nazw, pozwalając jej funkcji członkowskiej na dostęp do szczegółów implementacji klasy. Dzięki temu funkcje nie będące członkami powiązane z klasą będą miały łatwy dostęp do elementów wewnętrznych tej klasy. Zasadniczo jak to zrobiłbyś teraz? Użyj deklaracji klasy, gdy przestrzeń nazw jest wystarczająca i zaprzyjaźnij się z tą klasą? Przyjaciel każda funkcja, która potrzebuje dostępu do klasy? – n1ckp

+2

Istnieje wiele, wiele różnic między klasami i przestrzeniami nazw. –

+5

Jedna różnica polega na tym, że przestrzeń nazw nie jest zamknięta: zawsze ją otwierasz i zaczynasz dodawać do niej elementy. Deklaracja przestrzeni nazw, którą zaprzyjaźniłaby się z tobą, całkowicie by się otworzyła. Uwolnij klasę, która kończy się przy zamknięciu}; –

Powiązane problemy