Класс conditional
Класс conditional выбирает один из двух типов
на этапе компиляции. В первый параметр шаблона
мы передаем условие, во второй - тип, который
будет выбран, если условие истинно, а в третий -
тип, который будет выбран, если условие ложно.
Выбранный тип доступен через вложенный псевдоним
type.
Синтаксис
std::conditional<condition, type1, type2>::type
Если condition истинно, то type
является псевдонимом для type1. Если
condition ложно, то type
является псевдонимом для type2.
Пример
Давайте выберем тип int, так как условие
true истинно:
#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
using res = conditional<true, int, double>::type;
cout << is_same<res, int>::value << endl;
return 0;
}
Результат выполнения кода:
1
Пример
Давайте выберем тип double, так как условие
false ложно:
#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
using res = conditional<false, int, double>::type;
cout << is_same<res, double>::value << endl;
return 0;
}
Результат выполнения кода:
1
Пример
Давайте используем conditional для выбора
типа переменной в зависимости от размера другого
типа:
#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
using res = conditional<(sizeof(int) > 2), long, short>::type;
res num = 42;
cout << sizeof(num) << endl;
return 0;
}
Результат выполнения кода:
8