Переменная is_integral_v
Переменная is_integral_v из заголовочного файла
<type_traits> проверяет, является ли переданный
шаблонный тип целочисленным. Если тип является целочисленным,
переменная содержит true, иначе - false.
В первый параметр мы передаем проверяемый тип.
Результат доступен на этапе компиляции, поэтому
is_integral_v удобно использовать в
if constexpr, static_assert и SFINAE-конструкциях.
Синтаксис
template <class T>
inline constexpr bool is_integral_v = is_integral<T>::value;
Пример
Давайте проверим несколько типов на целочисленность и выведем результат в консоль:
#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
cout << is_integral_v<int> << endl;
cout << is_integral_v<char> << endl;
cout << is_integral_v<double> << endl;
cout << is_integral_v<bool> << endl;
return 0;
}
Результат выполнения кода:
1
1
0
1
Пример
Давайте используем is_integral_v вместе с
if constexpr, чтобы выбрать поведение
функции в зависимости от типа:
#include <iostream>
#include <type_traits>
using namespace std;
template <typename T>
void print(T value)
{
if constexpr (is_integral_v<T>)
{
cout << "integral: " << value << endl;
}
else
{
cout << "not integral: " << value << endl;
}
}
int main()
{
print(12345);
print(3.14);
return 0;
}
Результат выполнения кода:
"integral: 12345"
"not integral: 3.14"
Смотрите также
-
переменная
is_same_v,
которая проверяет совпадение двух типов -
переменная
is_pointer,
которая проверяет, является ли тип указателем -
шаблон
if constexpr,
который выбирает ветвь кода на этапе компиляции -
шаблон
enable_if,
который включает шаблон при выполнении условия