elaborated_type_specifier — 정교화된 타입 지정자
elaborated_type_specifier — 정교화된 타입 지정자 (Elaborated type specifier)
**정교화된 타입 지정자(elaborated type specifier)**는 이전에 선언된 클래스 이름(class, struct, union)이나 열거형 이름을 참조하는 데 쓰여요. 그 이름이 비타입 선언에 가려져(hidden) 있어도 쓸 수 있어요. 또한 새로운 클래스 이름을 선언하는 데도 쓰여요.
출처: cppreference
본문
문법 (Syntax)
class-key class-name // (1)
enum enum-name // (2)
class-key attr identifier ; // (3)
class-key—class,struct,union중 하나class-name— 이전에 선언된 클래스 타입의 이름(선택적으로 한정됨), 또는 아직 타입 이름으로 선언되지 않은 식별자enum-name— 이전에 선언된 열거형 타입의 이름(선택적으로 한정됨)attr— 임의 개수의 속성
struct Node { int value; };
// 이름이 가려진 경우
int Node; // 변수 Node가 클래스 Node를 가림
struct Node n; // 정교화된 타입 지정자로 클래스에 접근 (OK)
다음 형태는 새로운 클래스 이름을 선언해요.
struct MyStruct; // 정방향 선언
class Widget; // 정방향 선언
union Data { int i; float f; };
정교화된 타입 지정자는 주로 이렇게 쓰여요.
- 이름 조회에서 클래스 이름이 변수·함수 같은 비타입 선언에 가려졌을 때, 그 클래스를 다시 참조하고 싶을 때
- 어떤 이름이 타입이 아니라 함수나 변수로 해석될 위험이 있을 때 "이건 타입이다"고 명시적으로 알려 줄 때
enum과 함께 써서 열거형 이름을 가린 비타입 이름과 구분할 때
주석이나 특정 오래된 문법(class Foo f;처럼)에서 흔히 보이지만, 현대 C++에서도 "이름이 타입이다"라는 의도를 명확히 할 때 유용해요.