반응형
함수 템플릿을 작성할 때 특정 타입일 경우 다른 행동을 정의하고 싶다. 이럴 때 템플릿 특수화를 사용했다.
그러나 C++ 17부터 if constexpr을 사용해서 타입에 따른 행동을 정의할 수 있다. 아래의 조건식은 타입 T가 MyClass 타입과 동일한지 판별한다.
template <class T>
void Func()
{
if constexpr (std::is_same_v<T, MyClass>)
{
// Do something...
}
}
위의 if문에서 컴파일 타임에 조건식이 true인지 false인지 판별한다. 따라서 아래와 같이 조건식에 변수는 올 수 없다. 컴파일 타임에 알 수 있는 결과값이여야 한다.
template <class T>
void Func()
{
int val = 3;
if constexpr (val == 3) // compile error
{
// Do something...
}
}
이러한 조건 외에도 어떤 클래스의 자식 클래스인지 등을 확인할 수 있다(물론 컴파일 타임에 확인하는 것이기 때문에 부모 클래스의 포인터 타입이 실제로 가리키는 인스턴스는 확인할 수 없다.)
타입 판별과 관련된 라이브러리(type_trait)는 여기를 확인.
'C,C++ > C++' 카테고리의 다른 글
2D vector size를 통해 초기화 하는 법 (0) | 2021.09.09 |
---|---|
array를 소유하는 std::shared_ptr, deleter 설정법 (0) | 2021.02.25 |
[C++] placement new - 내가 원하는 메모리에 객체를 할당하고 싶다면 (0) | 2020.12.25 |
클래스에서 가변 인자 템플릿 이용 시 함수 선언 방법 (0) | 2020.12.02 |
Heap 메모리 장단점(Windows) (0) | 2020.09.29 |
댓글