2011-01-22 6 views
0

STL, Win32, Boost, posix 등과 같은 현재 C/C++ 라이브러리가 크기가 커서 어떤 식별자가 문제가되는지 질문해야합니다. 네임 스페이스가있는 경우에도 기존 라이브러리와 함께 작동하도록 설계된 새 라이브러리를 설계 할 때 다른 라이브러리의 가장 많이 사용되는 식별자와 충돌하지 않는 식별자를 선택할 수 있다는 것이 좋습니다.표준 라이브러리에서 "찍은"식별자의 목록을 어디서 찾을 수 있습니까?

적어도 C++ 표준 라이브러리 (0x 포함)의 경우 목록을 사용할 수 있어야합니다. 누군가 헤더 파일 세트를 읽고 namespace에 의해 정렬 된 모든 이름 목록을 만드는이 도구를 사용했다고 생각하는 것이 합리적 일 것입니다. 그런 도구를 아는 사람이라면 누구입니까? 이 도구는 특정 cpp 파일에 #include 된 것만이 아니라 디렉토리 트리의 모든 헤더를 읽는 것이 좋습니다.

+0

doxygen을 사용하고 계신가요? –

답변

-1

egrep 사용은 어떻습니까? 심지어 네임 스페이스

+0

1. 이것을하기 위해 정규 표현식을 쓰는 것이 사소한 일이 아니기 때문에. 이 작업을 수행하는 데 더 강력한 도구가 필요합니다. 2.'# included '일 가능성이있는 모든 파일의 위치가 미리 알려지지 않았기 때문에. –

+0

예, 정규 표현식은 쉽게 설계 할 수 없습니다 (가능한?). 아니요, # include 트리가 무엇을 스캔할지 정의하고 싶지 않습니다. 라이브러리에있는 내용, 즉 디렉토리 (트리)의 모든 파일에 관심이 있습니다. –

4

을 [멈블은 30 개 문자를 얻을 중얼]는 기존에을 togheter 작동하도록 설계된 새로운 라이브러리를 desiging 때 다른 라이브러리의 가장 많이 사용되는 식별자와 충돌하지 않는 식별자를 선택 할 수있는 좋은 사람.

나는 꽤 많은 라이브러리가 있지만 실제로이 시도는 근본적으로 잘못된 것이라고 알고 있습니다.

식별자가 충돌하지 않도록 디자인하고 명확하고 짧으며 설명이 가능하도록 디자인하십시오. 이것들이 유일한 기준이어야합니다.

식별자 충돌은 네임 스페이스 덕분에 해결 된 문제입니다. 제대로 사용되면 이름 충돌이 발생하지 않습니다.

+1

"이름 충돌이 제대로 발생하지 않습니다." - 때때로 ADL을 제외하고. 예를 들어,'std :: swap'의 의미와 다른 의미로 자유 함수 swap을 정의하는 것은 대단히 추천하지 않습니다. 실제로 그것이 내가 알고있는 유일한 기능은 ADL을 통해 과부하가 걸릴 것으로 예상되지만, 원칙적으로 라이브러리가 라이브러리를 소개 할 때마다 모든 네임 스페이스를 오염시킵니다. 어떤 호출자가 완전한 자격없이'sort'를 호출하기 위해'std :: sort'를 사용한다면, 그들 자신의'sort' 함수를 포함하는 네임 스페이스와 충돌을 일으킬 수 있습니다. –

+0

@Steve : true하지만 충돌이 발생하자마자 명시 적 자격으로 해결할 수 있기 때문에 큰 문제는 아닙니다. 이것은 로컬 변경 일뿐입니다 ('using'이 헤더에서 전역 적으로 사용되지 않는 경우 모든 지옥이 느슨해집니다). –

+0

@Konrad : 공정한 포인트. 네임 스페이스가 없다면 C에서의 동일한 충돌은 악몽입니다. –

관련 문제