본문 바로가기
C,C++/C++

[C++ 17] 템플릿 특수화보다 사용하기 좋은 if constexpr

by woohyeon 2021. 1. 1.
반응형

함수 템플릿을 작성할 때 특정 타입일 경우 다른 행동을 정의하고 싶다. 이럴 때 템플릿 특수화를 사용했다.

그러나 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)는 여기를 확인.

en.cppreference.com/w/cpp/language/if




댓글