반응형
함수 템플릿 사용시 컴파일러에 의한 타입 추론을 막는 테크닉
- 함수 템플릿 사용시 사용자가 반드시 타입을 전달하도록 하고 싶을때 사용하는 기법
- C++17 이하에서 클래스 템플릿이 타입 추론을 지원하지 않는 성격을 활용
- 함수 템플릿 파라미터로 클래스 템플릿을 사용
- 컴파일러에 의한 타입 추론이 원하지 않는 타입으로 추론되는 경우 방지
template<typename T> struct identity
{
typedef T type;
};
template<typename T> void foo(T a) {}
template<typename T> void goo(typename identity<T>::type a) {}
int main()
{
identity<int>::type n; // int
foo(3); // ok
foo<int>(3); // ok
goo(3); // error, 클래스 템플릿의 인자는 추론이 불가하므로 C++17 이하
goo<int>(3); // ok
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 지연 인스턴스화(Lazy Instantiation) (0) | 2019.05.28 |
---|---|
C++ 템플릿 주의사항/template instantiation (0) | 2019.05.28 |
C++ Idioms/Object Generator (0) | 2019.05.28 |
C++ 템플릿 타입 추론(Template Argument Type Deduction) (0) | 2019.05.21 |
C++ 템플릿 인스턴스화(Template Instantiation) (0) | 2019.05.21 |