types_conditional
types_conditional (조건부 타입)
이 페이지는 컴파일 타임에 조건에 따라 타입을 선택하는 std::conditional 템플릿에 대해 다루고 있어요. std::conditional은 불리언 상수 B가 참이면 T를, 거짓이면 F를 type 멤버 typedef로 제공해요. 이를 통해 템플릿 메타프로그래밍에서 조건부 타입 선택을 간단하게 구현할 수 있답니다.
출처: cppreference
본문
<type_traits> 헤더에 정의되어 있어요.
template < bool B , class T , class F > struct conditional ;
(since C++11)
conditional은 멤버 typedef type을 제공하며, 컴파일 타임에 B가 true이면 T로, B가 false이면 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) |
오버로드 해석에서 함수 오버로드나 템플릿 특수화를 조건부로 제거해요 (클래스 템플릿) |
|---|