=> Template 정의에서 알 수 없는 식별자가 형식인 것을 compiler에게 힌트를 제공하는 것
=> 사람은 이해할 수 있으나, 컴퓨터에게 모호한 경우 사용
1. 사용
=> 기본적으로 typename은 class와 동일하게 사용함[template의 type 매개변수 선언시]
template<typename T> class Map;
template<class T> class Map;
//두개가 동일
=> But, 다른 경우 두경우가 존재함
2. 차이
2-1. template의 template를 설정하는 경우
template<template<typename,typename> class Container, typename type>
=> 이경우에는 Class를 반드시 사용해주어야함. 그렇지 않으면 typename과 헷갈려하는 경우가 발생
2-2. 의존 타입의 경우
template<typename T>
class A
{
typedef typename T::bring T2;
};
=> 템플릿 매개변수에 종속된 것을 말함
=> C++에 따르면 typename이 붙지 않은 거은 무조건 변수나 함수로 간주
=> typename을 붙이면 뒤에 붙는 식별자가 type 이라는 것을 명시함
=> T가 T::bring의 타입이라는 것을 확실히 정의
'C++ > Tips' 카테고리의 다른 글
[c++]SmartPointer (0) | 2021.02.02 |
---|---|
[c++] struct (0) | 2021.01.26 |
[c++]auto (0) | 2021.01.19 |
[c++]volatile (0) | 2021.01.12 |
[C++] Extern (0) | 2021.01.05 |