types_conditional

types_conditional (조건부 타입)

이 페이지는 컴파일 타임에 조건에 따라 타입을 선택하는 std::conditional 템플릿에 대해 다루고 있어요. std::conditional은 불리언 상수 B가 참이면 T를, 거짓이면 Ftype 멤버 typedef로 제공해요. 이를 통해 템플릿 메타프로그래밍에서 조건부 타입 선택을 간단하게 구현할 수 있답니다.

출처: cppreference

본문

<type_traits> 헤더에 정의되어 있어요.

template < bool B , class T , class F > struct conditional ;

(since C++11)

conditional은 멤버 typedef type을 제공하며, 컴파일 타임에 Btrue이면 T로, Bfalse이면 F로 정의돼요.

프로그램에서 std::conditional에 대한 특수화를 추가하면 동작이 정의되지 않아요.

멤버 타입

멤버 타입 정의
type B == true이면 T, B == false이면 F

헬퍼 타입

template < bool B , class T , class F > using conditional_t = typename conditional < B , T , F >:: type ;

(since C++14)

가능한 구현

template < bool B , class T , class F > struct conditional { using type = T ; }; template < class T , class F > struct conditional < false , T , F > { using type = F ; };

예제

#include <iostream>
#include <type_traits>
#include <typeinfo>

int main()
{
    using Type1 = std::conditional<true, int, double>::type;
    using Type2 = std::conditional<false, int, double>::type;
    using Type3 = std::conditional<sizeof(int) >= sizeof(double), int, double>::type;
   
    std::cout << typeid(Type1).name() << '\n';
    std::cout << typeid(Type2).name() << '\n';
    std::cout << typeid(Type3).name() << '\n';
}

가능한 출력:

int
double
double

같이 보기

enable_if (C++11) 오버로드 해석에서 함수 오버로드나 템플릿 특수화를 조건부로 제거해요 (클래스 템플릿)

더 알아보기 (Learn more)

cppreference