C++에서 계층적 네임스페이스를 실제로 사용한 적은 언제입니까?

StackOverflow https://stackoverflow.com/questions/117110

  •  02-07-2019
  •  | 
  •  

문제

한 수준의 네임스페이스 사용을 이해할 수 있습니다.하지만 네임스페이스에는 3가지 수준이 있습니다.미친 것 같아.실용적인 용도가 있나요?아니면 단지 오해일까요?

도움이 되었습니까?

해결책

계층적 네임스페이스는 점점 더 정제된 정의를 허용한다는 점에서 유용합니다.확실히 단일 공급자가 동일한 이름을 가진 두 개의 클래스를 생성할 수 있습니다.종종 첫 번째 수준은 회사 이름으로 채워지고, 두 번째 수준은 제품을 지정하고, 세 번째(및 그 이상) 수준은 도메인을 제공합니다.

네임스페이스 분리의 다른 용도도 있습니다.널리 사용되는 상황 중 하나는 팩토리 패턴의 기본 클래스를 자체 네임스페이스에 배치한 다음 공급자가 자체 네임스페이스에 파생 팩토리를 배치하는 것입니다.예: System.Data, System.Data.SqlClient 그리고 System.Data.OleDbClient.

다른 팁

분명히 그것은 의견의 문제입니다.그러나 그것은 실제로 조직으로 귀결됩니다.예를 들어, 다음과 같은 함수/객체를 포함하는 플러그인 API가 있는 프로젝트가 있습니다.

plugins::v1::function

2.0이 출시되면 v2 하위 네임스페이스에 배치됩니다.앞으로는 이전 버전과의 호환성을 훌륭하게 지원해야 하는 v1 멤버를 더 이상 사용하지 않고 제거하지 않을 계획입니다.이것은 "정상적인" 사용법의 한 예일 뿐입니다.어떤 사람들은 다를 것이라고 생각합니다. 그러나 제가 말했듯이 그것은 의견의 문제입니다.

큰 코드베이스에는 필요합니다.예를 들어 부스트를 살펴보세요.나는 누구도 부스트 코드를 '미친'이라고 부르지 않을 것이라고 생각합니다.

계층 구조의 한 수준에서 사람들은 대략 10개 항목 정도만 이해할 수 있다는 사실을 고려하면 두 수준에서는 최대 100개만 제공됩니다.충분히 큰 프로젝트에는 더 많은 것이 필요하므로 쉽게 3레벨까지 올라갈 수 있습니다.

저는 yyy 회사에서 XXX 애플리케이션 작업을 하고 있으며 GUI 하위 시스템을 작성 중입니다.그래서 저는 yyy::xxx::gui를 네임스페이스로 사용합니다.

두 개 이상의 레벨이 필요한 상황에 쉽게 처할 수 있습니다.예를 들어, 귀하의 회사에는 타사 코드와 분리하기 위해 모든 코드에 대한 거대한 네임스페이스가 있으며 자체 네임스페이스에 넣을 라이브러리를 작성하고 있습니다.일반적으로 계층적으로 나누어진 매우 크고 복잡한 시스템이 있을 때마다 여러 네임스페이스 수준을 사용하는 것이 합리적입니다.

이는 귀하의 필요와 프로그래밍 스타일에 따라 다릅니다.하지만 장점 중 하나는 namespace 파티션 이름 공간(따라서 이름)을 돕는 것입니다.단일 네임스페이스를 사용하면 프로젝트의 크기와 복잡성이 증가하므로 이름 충돌 가능성도 높아집니다.

공유하거나 재사용할 코드를 작성하는 경우 이는 더욱 중요해집니다.

신청에 동의합니다.내 경험에 따르면 여러 수준의 네임스페이스를 사용하는 대부분의 사람들은 소음이 훨씬 적은 Java 또는 .NET 배경에서 왔습니다.나는 좋은 클래스 접두사가 여러 수준의 네임스페이스를 대신할 수 있다는 것을 알았습니다.

그러나 나는 Boost(및 기타 라이브러리)에서 여러 네임스페이스 수준을 효과적으로 사용하는 것을 보았습니다.모든 것이 부스트 네임스페이스에 있지만 라이브러리는 자체 네임스페이스에 있는 것이 허용됩니다(권장됩니까?).예를 들어 Boost::this_thread 네임스페이스입니다.그것은 다음과 같은 것을 허용합니다 ...

boost::this_thread::get_id()
boost::this_thread::interruption_requested()

"this_thread"는 무료 함수 모음을 위한 네임스페이스일 뿐입니다.클래스와 정적 함수를 사용하여 동일한 작업을 수행할 수 있습니다(예:자유 함수를 정의하는 Java 방식), 하지만 언어에 자연스러운 방식이 있는데 왜 부자연스러운 일을 할까요?

.Net 기본 클래스 라이브러리를 보면 네임스페이스 계층 구조가 잘 활용되는 것을 볼 수 있습니다.몇몇 곳에서는 4~5단계 깊이로 진행되지만 대부분은 2~3단계에 불과하며 조직은 물건을 찾는 데 매우 좋습니다.

코드베이스가 클수록 계층적 네임스페이스의 필요성도 커집니다.프로젝트가 점점 더 커지면 항목을 더 쉽게 찾을 수 있도록 프로젝트를 분할해야 한다는 것을 알게 됩니다.

예를 들어 현재 우리는 2레벨 계층구조를 사용하고 있습니다.그러나 우리가 지금 이야기하고 있는 더 큰 부분 중 일부는 이를 3개 레벨로 나누는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top