2008-11-06 2 views
2

대부분의 C++ 프로그래머는 글로벌 네임 스페이스를 오염시키는 것이 나쁜 생각이라고 생각하지만이 규칙을 무시할 수있는 시간이 있습니까?글로벌 네임 스페이스 반투하기

mytypes.h 

typedef int MY_TYPE; 

foo.cpp 

MY_TYPE myType; 

또는 네임 스페이스를 사용합니다 : -

예를 들어, 내가 특정 응용 프로그램을 통해 모두 사용할 필요는 유형이 나는 때문에 그것을 정의해야

mytypes.h 

namespace ns { 
typedef int MY_TYPE; 
} 

foo.cpp 

ns::MY_TYPE myType; 
... 
using namespace ns; 
MY_TYPE myType; 

당신을 취하다? 첫 번째 방법을 사용할 수있는 경우가 있습니까?

답변

4

응용 프로그램 관련 코드에서 라이브러리 코드를 분할 할 때 네임 스페이스를 사용하고 큰 프로젝트에서는 프로젝트를 구성하는 다양한 모듈을 분할합니다.

전역 네임 스페이스는 응용 프로그램의 여러 모듈에서 사용되는 응용 프로그램 관련 유형 및 기능에 유용합니다.

따라서 응용 프로그램 전체에서 MY_TYPE이 사용되는 경우 전역 네임 스페이스에 넣거나 그렇지 않으면 명명 된 네임 스페이스에 넣습니다.

+0

대부분 동의하지만 MY_TYPE을 응용 프로그램에서 사용하는 경우 별도의 모듈/라이브러리의 일부로 사용할 수 있다는 신호가 될 수 있습니다. –

3

글로벌 네임 스페이스 사용에 동의하지 않습니다 (물론 main 제외). 전체 응용 프로그램에서 사용되는 내용의 경우 #include 행 뒤에 .cpp 파일의 상단에 using namespace을 간단하게 사용할 수 있습니다.

+1

네임 스페이스를 사용하지 않는 것부터 글로벌 네임 스페이스 IMHO를 사용하지 않는 것부터 극한으로 가자. 전역 네임 스페이스는 정확히 네임 스페이스입니다. MFC 클래스 용 CObject와 같은 것;) 유용 할 수도 있습니다. –

+0

자바의 사상 학교에서 온 것 같아요. 모든 것이 하나의 패키지에 있어야한다고합니다. (사소한 응용 프로그램을 쓰지 않는 한 말입니다.) Java에서 명명되지 않은 패키지의 클래스는 명명 된 패키지의 클래스와 비교하여 두 번째 클래스 상태를 갖습니다. –

7

별도의 네임 스페이스에있는 당신의 유형을 정의하고해야하지, 응용 프로그램 수도

using ns::MY_TYPE; 
4

라이브러리를 사용할 수 있습니다.

응용 프로그램에서 여러 사람이 작업 할 때 물론 명확한 규칙이 필요하며 명확한 규칙은 "하지 말아야합니다"입니다. 그러나 모든 경우에 이상적인 것은 아닙니다.

"using"문은 머리말이 아닌 CPP 파일의 맨 위에 있어야하지만, 가까운 장래에 대부분의 컴파일러에 대한 템플리트 작성이 복잡하기 때문에 머리말에 있어야합니다.

규모가 크지 만 잘게 분할 된 프로젝트가있는 대부분의 소규모 팀에서 네임 스페이스 오염은 각 코드를 제어하는 ​​한 많은 문제가되지 않으며 설명적인 이름을 고집합니다. 내가 기억하는 사례는 거의 없으며 쉽게 처리되었습니다. 하지만 소스가있는 경우에도 타사 라이브러리에 큰 문제가있었습니다.

대규모 팀 또는 단일 프로젝트로 진행되는 커다란 프로젝트가있는 YMMV.