std::conditional
From cppreference.com
| ヘッダ <type_traits> で定義 |
||
| template< bool B, class T, class F > struct conditional; |
(C++11以降) | |
コンパイル時にBがtrueならTとして、BがfalseならFとして定義されるメンバ型typeを提供します。
プログラムが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) |
条件に応じて関数のオーバーロードやテンプレートの特殊化をオーバーロード解決から除外する (クラステンプレート) |