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++?
5
A
Odpowiedz
1
Nie, nie jest to możliwe w C++. Szczerze mówiąc, ma on kiepski design.
0
Jeśli używasz .NET, możesz rzucić okiem na InternalsVisibleTo attribute. W każdym razie zauważ, że działa to dla całych złożeń, a nie dla pojedynczych przestrzeni nazw.
Powiązane problemy
- 1. Stała przestrzeni nazw w C#
- 2. zewnętrzne powiązanie "C" w przestrzeni nazw C++?
- 3. Dostęp do globalnej przestrzeni nazw C++ z innej przestrzeni nazw
- 4. Metody wewnątrz przestrzeni nazw C#
- 5. svcutil.exe i parametr przestrzeni nazw
- 6. Dostęp do przestrzeni nazw dominującą w C++
- 7. Rdza "używaj" a C++ "używając przestrzeni nazw"
- 8. stwardnienie definicja przestrzeni nazw zmiennych, C++ kompilacji
- 9. C++ getline() nie wymaga deklaracji przestrzeni nazw
- 10. Szablony w języku C++: Częściowe specyfikacje szablonów i klasy znajomych
- 11. Serializacja XML i przedrostki przestrzeni nazw
- 12. Najlepsze praktyki: używanie przestrzeni nazw lub ponowne otwieranie przestrzeni nazw?
- 13. Niejednoznaczne odwołanie w przestrzeni nazw
- 14. Prywatna klasa w przestrzeni nazw
- 15. Zastępowanie przestrzeni nazw w Pythonie
- 16. Różnice semantyczne przestrzeni nazw
- 17. SelectSingleNode bez przestrzeni nazw
- 18. zanieczyszczenie przestrzeni nazw make_pair
- 19. Funkcja przestrzeni nazw w jQuery
- 20. Odbicie w przestrzeni nazw PHP
- 21. Przestrzenie nazw i operator Przeciążanie w C++
- 22. Konstruktorzy wewnątrz przestrzeni nazw
- 23. Porządek wyszukiwania przestrzeni nazw
- 24. zrozumienia javascript globalnej przestrzeni nazw i zamknięć
- 25. Określanie zespołu dla przestrzeni nazw
- 26. JAXB i mniej przestrzeni nazw XML
- 27. Parsowanie przestrzeni nazw XML?
- 28. C++ makra i przestrzenie nazw
- 29. Punkt nie istnieje w przestrzeni nazw System.Drawing
- 30. Tworzenie określonego dokumentu XML z wykorzystaniem przestrzeni nazw w C#
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
Istnieje wiele, wiele różnic między klasami i przestrzeniami nazw. –
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}; –