std::conditional
来自cppreference.com
在标头 <type_traits> 定义 | ||
template<bool B, class T, class F > struct conditional; | (C++11 起) | |
提供成员 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; | (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
[编辑]参阅
(C++11) | 条件性地从重载决议移除函数重载或模板特化 (类模板) |