중첩 된 네임 스페이스를 사용할 때 정규화 된 이름이 꽤 길어지는 경우가 있습니다. 입력의 양을 줄이기 위해 namespace abc = aaa::bbb::ccc
을 사용할 수 있음을 알고 있습니다 (어떤 경우에는 가독성을 향상시킬 수도 있음).C++에서 네임 스페이스의 이름을 바꾸기위한 일관된 접근
그러나 프로젝트의 모든 파일에서이 이름 바꾸기를 수행하는 가장 좋은 방법은 무엇입니까? 직접적인 접근법 (즉, 긴 네임 스페이스의 이름을 사용 기준으로 변경)은 다른 파일에서 동일한 완전한 이름에 대해 서로 다른 짧은 이름을 사용하여 최종적으로 끝날 수 있습니다. 그래서, 나는 이것을하기위한보다 일관된 방법을 생각해 냈습니다.
예를 들어, 같은 것을 가정 해 봅시다 : 나는 감소 된 이름을 포함하여 디렉토리 당 하나의 헤더를 만들 생각
project
|- client
| |- core
| |- plugin
| |- util
|- server
...
. 예를 들어 project/client/core/core.h
에는 namespace pr_cl_core = project::client::core
이 포함됩니다 (이 짧은 이름의 예는 다소 불량하지만 실제 프로젝트에서는 더 의미가 있습니다). 그런 다음 project/client/core
의 모든 헤더 파일에 core.h
을 포함 시키므로 해당 디렉토리의 헤더가 포함될 때 project/client/plugin/plugin_foo.h
이라고 가정 해 봅시다. 짧은 네임 스페이스 버전을 쉽게 사용할 수 있습니다.
이렇게하는 것이 좋은 방법입니까? 다른 더 좋은 방법이 있습니까?
SO에서 C 네임 스페이스에 대한 몇 가지 질문 (예 : 1 및 2)이 발견되었지만 프로젝트 차원에서 이름 바꾸기를 해결하는 방법과 관련이 없습니다.
EDIT : 또한 이러한 메커니즘을 사용하여 전체 프로젝트에 대해 긴 네임 스페이스 (예 : 부스트의 이름)를 체계적으로 바꿀 수 있습니다. 현재 내가 번역 단위별로 이렇게
namespace ip = boost::asio::ip;
namespace ptime = boost::posix_time;
,하지만 전체 프로젝트에 대한 글로벌 접근 방식을 사용하여 작업을 수행하고 싶습니다 : 예를 들어, 나는 일반적으로 같은 일부 네임 스페이스 이름을 바꿉니다.
이렇게 할 수 있습니다. 또는 더 쉽게 만들 수 있습니다. 모든 네임 스페이스 및 별칭에 대한 프로토 타입을 선언하는 최상위 수준의 머리글이 있어야합니다. 그런 다음 하위 디렉토리에 포함 시키십시오. – Linuxios
@Linuxios 나는 그와 비슷한 것을 생각하고 있었지만, 의존성이 많이 생기게되었습니다. 글로벌 파일을 변경하면 사실상 프로젝트의 모든 파일을 다시 컴파일해야합니다. 즉, 네임 스페이스의 구조가 너무 많이 변경되지 않으면 큰 문제가되어서는 안됩니다. – betabandido
@ 베타 벤 디도 : 아. 신속하고 더러운 해결책은 어떨까요? 전처리 기 매크로! 각 파일에서 앨리어스를 선언하십시오. 이렇게하면 각 파일에 별칭을 지정할 수 있습니다. 예, 사람들은 코드 중복에 대해 파울을 울릴 지 모르지만 항상 빌드 타임 스크립트를 추가하여 사용자를 위해 스크립트를 추가 할 수 있습니다. – Linuxios