2016-09-28 1 views
3

C++에서 using 별칭을 여러 번 선언하는 것이 합법적입니까? 하나의 헤더 파일이 'public'으로 사용되는 템플릿 라이브러리가 있습니다.이 라이브러리에는 모든 템플릿 클래스 선언과 별칭, 그리고 '구현'파일이 포함되어 있습니다 (문자 적 의미가 아니라 템플릿 클래스의 정의가 들어 있습니다). 공개 헤더 파일에는 모든 구현 헤더가 포함됩니다.C++에서 'using'별칭의 여러 정의

구현 파일에서 공용 헤더를 포함 할 수 없습니다. 이는 순환 종속성을 유발할 수 있기 때문입니다. 그러나 구현 파일 내부에 헤더 파일에 선언 된 템플릿 별칭을 사용하고 싶습니다.

예 :

'공공'헤더 :

using true_type = logical_constant<true>; 
using false_type = logical_constant<false>; 

'개인'구현 파일 :

사용하여 별칭 별칭 둘만큼
using true_type = logical_constant<true>; 
using false_type = logical_constant<false>; 

같은 일이 합법적인가? 이 간단한 예제는 MSVC 14에서 작동했지만 비슷한 방식으로 더 복잡한 별칭을 사용하려고 시도했을 때 컴파일러는 불평했습니다.

+0

컴파일러에서 제공하는 "더 복잡한 별칭"과 정확한 불만의 예를 제공 할 수 있습니까? – kdelaney

+0

실제 문제 코드 [mcve]를 입력하십시오. – Barry

답변

4

C++에서 별칭을 여러 번 사용하여 동일하게 선언하는 것이 합법적입니까?

예, 유효합니다.

using ... = ...; 구문을 가진 별명 선언typedef를 선언하는 애호가 방법입니다. 따라서 별칭을 다른 형식으로 선언하지 않는 한 아무 문제없이 반복 할 수 있습니다.

+0

네임 스페이스 범위에서만 사용하는 한 오케이 일 것입니다. –