Класс is_pointer
Класс is_pointer из заголовочного файла type_traits
проверяет, является ли переданный тип указателем.
В параметр шаблона мы передаем тип, который нужно проверить.
Класс содержит константное поле value, которое равно
true, если тип является указателем, и false в противном случае.
Также доступна переменная-шаблон is_pointer_v,
возвращающая значение напрямую.
Синтаксис
template <class T>
struct is_pointer;
template <class T>
inline constexpr bool is_pointer_v = is_pointer<T>::value;
Пример
Давайте проверим, является ли тип int* указателем:
#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
cout << boolalpha;
cout << is_pointer<int*>::value << endl;
cout << is_pointer<int>::value << endl;
return 0;
}
Результат выполнения кода:
true
false
Пример
Давайте воспользуемся переменной-шаблоном is_pointer_v
для более краткой записи:
#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
cout << boolalpha;
cout << is_pointer_v<double*> << endl;
cout << is_pointer_v<double> << endl;
return 0;
}
Результат выполнения кода:
true
false
Пример
Давайте проверим несколько типов, включая указатель на функцию и умный указатель:
#include <iostream>
#include <type_traits>
#include <memory>
using namespace std;
int main()
{
cout << boolalpha;
cout << is_pointer_v<void*> << endl;
cout << is_pointer_v<int(*)(int)> << endl;
cout << is_pointer_v<shared_ptr<int>> << endl;
cout << is_pointer_v<int&> << endl;
return 0;
}
Результат выполнения кода:
true
true
false
false
Смотрите также
-
класс
is_same,
который проверяет совпадение типов -
класс
is_integral,
который проверяет целочисленный тип -
класс
decay,
который убирает ссылки и квалификаторы -
класс
remove_reference,
который убирает ссылку из типа