-
항목4. 연역된 형식을 파악하는 방법Effective Modern C++ 2022. 7. 14. 21:17
IDE 편집기
IDE의 코드 편집기 중에는 프로그램 개체(변수, 매개변수, 함수 등) 위에 마우스 커서를 올리면 그 개체의 형식을 표기해 주는 것이 많다.
일반적으로, int 같은 간단한 형식의 경우에는 IDE가 알려준 정보가 쓸만하다. 그러나, 좀 더 복잡한 형식이 관여할 때에는 IDE가 표시한 정보가 그리 도움이 되지 않을 수도 있다.
컴파일러의 진단 메시지
연역한 형식을 파악하는 데 효과적인 방법 하나는, 원하는 형식 때문에 컴파일에 문제가 발생하게 만드는 것이다.
다음은 한 예시이다.
template<typename T> class TD; ... TD<decltype(x)> xType; // 오류 메시지 출력 TD<decltype(y)> yType; // 오류 메시지 출력 ...인스턴스화할 템플릿 정의가 없어서 컴파일 오류가 발생한다. 해당 오류 메시지를 보면 x와 y에 연역된 형식을 확인할 수 있다.
실행시점 출력
실행 시점에 직접 타입을 문자열로 출력해 볼 수 있다.
cout << "T = " << typeid(T).name() << '\n'; cout << "param = " << typeid(param).name() << '\n';한계점
하지만 IDE, 오류 메시지, 실행시점 출력 등으로 확인한 형식은 항상 정확하지는 않다. 그래서 비교적 정확성이 높은 Boost TypeIndex 라이브러리 라는 외부 라이브러리가 존재한다. 이를 사용해 비교적 정확한 형식을 파악할 수 있지만 역시 형식 연역 규칙들을 숙지하는 것보다 나은 것은 없다.
'Effective Modern C++' 카테고리의 다른 글
항목7. 객체 생성시 () 와 {} 를 구분하라 (0) 2022.07.19 항목5&6. auto를 선호하라 (0) 2022.07.17 항목3. decltype의 작동 방식을 숙지하라 (0) 2022.07.14 항목2. auto 형식 연역 규칙을 숙지하라 (0) 2022.07.14 항목1.템블릿 형식 영역 규칙 (0) 2022.01.11