저는 C ++에서 Java 및 C #으로 전환했고 네임 스페이스 / 패키지 사용이 훨씬 더 낫다고 생각합니다 (잘 구조화 됨). 그런 다음 C ++로 돌아와 동일한 방식으로 네임 스페이스를 사용하려고 시도했지만 필요한 구문이 헤더 파일 내에서 끔찍합니다.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
다음은 나에게도 이상하게 보입니다 (깊은 들여 쓰기를 피하기 위해).
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
위의 것을 표현하는 더 짧은 방법이 있습니까? 나는 뭔가를 놓치고있다
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
최신 정보
좋아, 일부는 Java / C # 및 C ++의 사용 개념이 다르다고 말합니다. 정말? 나는 (동적) 클래스 로딩이 네임 스페이스의 유일한 목적이 아니라고 생각합니다 (이것은 매우 기술적 인 관점입니다). 예를 들어 "IntelliSense"와 같이 가독성 및 구조화를 위해 사용하면 안됩니다.
현재 네임 스페이스와 거기에서 찾을 수있는 것 사이에는 논리 / 접착제가 없습니다. Java와 C #은 이보다 훨씬 낫습니다. 왜 <iostream>
네임 스페이스를 포함 하고 갖는가 std
? 좋습니다. 논리가 포함 할 헤더에 의존해야한다고 말하면 #include가 #include <std::io::stream>
또는 같은 "IntelliSense"친숙한 구문을 사용하지 않는 이유는 <std/io/stream>
무엇입니까? 기본 라이브러리에서 누락 된 구조화는 Java / C #에 비해 C ++의 약점 중 하나라고 생각합니다.
열렬한 충돌에 대한 고유성이 1 포인트 (C # 및 Java의 포인트이기도 함) 인 경우 프로젝트 이름이나 회사 이름을 네임 스페이스로 사용하는 것이 좋습니다. 그렇게 생각하지 않습니까?
한편으로는 C ++가 가장 유연하다고합니다.하지만 모두가 "이러지 마세요"라고 말했습니까? 나에게 C ++는 많은 일을 할 수 있지만 C #에 비해 많은 경우 가장 쉬운 일에도 끔찍한 구문을 가지고 있습니다.
업데이트 2
대부분의 사용자는 두 수준보다 더 깊은 중첩을 만드는 것이 말도 안된다고 말합니다. 그렇다면 Win8 개발에서 Windows :: UI :: Xaml 및 Windows :: UI :: Xaml :: Controls :: Primitives 네임 스페이스는 어떻습니까? 나는 마이크로 소프트의 네임 스페이스 사용이 합리적이라고 생각하며 실제로 2 단계보다 더 깊다. 더 큰 라이브러리 / 프로젝트에는 더 깊은 중첩이 필요하다고 생각합니다 (ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace와 같은 클래스 이름을 싫어합니다 ... 그러면 모든 것을 전역 네임 스페이스에 넣을 수도 있습니다.)
업데이트 3-결론
대부분은 "하지 마세요"라고 말하지만 ... 부스트조차도 한두 단계보다 더 깊은 중첩을 가지고 있습니다. 예, 라이브러리이지만 재사용 가능한 코드를 원한다면-자신의 코드를 다른 사람에게 줄 라이브러리처럼 취급하십시오. 또한 네임 스페이스를 사용하여 검색 목적으로 더 깊은 중첩을 사용합니다.
namespace
키워드 남용 입니까?