std::is_pointer
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct is_pointer; |
(seit C++11) | |
std::is_pointer ist ein UnaryTypeTrait.
Prüft, ob T ein Zeiger auf ein Objekt oder eine Funktion (einschließlich Zeiger auf void, aber ohne Zeiger auf Member) oder eine cv-qualifizierte Version davon ist. Stellt die Member-Konstante value bereit, die gleich true ist, wenn T ein Objekt-/Funktionszeigertyp ist. Andernfalls ist value gleich false.
Wenn das Programm Spezialisierungen für std::is_pointer oder std::is_pointer_v hinzufügt, ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Template-Parameter
| T | - | ein zu prüfender Typ |
[bearbeiten] Hilfsvariablen-Template
| template< class T > constexpr bool is_pointer_v = is_pointer<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true, wenn T ein Zeigertyp ist, andernfalls false(öffentliche statische Member-Konstante) |
Memberfunktionen
| operator bool |
konvertiert das Objekt zu bool, gibt value zurück (öffentliche Memberfunktion) |
| operator() (C++14) |
gibt value zurück (öffentliche Memberfunktion) |
Membertypen
| Typ | Definition |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[bearbeiten] Mögliche Implementierung
template<class T> struct is_pointer : std::false_type {}; template<class T> struct is_pointer<T*> : std::true_type {}; template<class T> struct is_pointer<T* const> : std::true_type {}; template<class T> struct is_pointer<T* volatile> : std::true_type {}; template<class T> struct is_pointer<T* const volatile> : std::true_type {}; |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <type_traits> int main() { struct A { int m; void f() {} }; int A::*mem_data_ptr = &A::m; // a pointer to member data void (A::*mem_fun_ptr)() = &A::f; // a pointer to member function static_assert( ! std::is_pointer<A>::value && ! std::is_pointer_v<A> // same thing as above, but in C++17! && ! std::is_pointer<A>() // same as above, using inherited operator bool && ! std::is_pointer<A>{} // ditto && ! std::is_pointer<A>()() // same as above, using inherited operator() && ! std::is_pointer<A>{}() // ditto && std::is_pointer_v<A*> && std::is_pointer_v<A const* volatile> && ! std::is_pointer_v<A&> && ! std::is_pointer_v<decltype(mem_data_ptr)> && ! std::is_pointer_v<decltype(mem_fun_ptr)> && std::is_pointer_v<void*> && ! std::is_pointer_v<int> && std::is_pointer_v<int*> && std::is_pointer_v<int**> && ! std::is_pointer_v<int[10]> && ! std::is_pointer_v<std::nullptr_t> && std::is_pointer_v<void (*)()> ); }
[bearbeiten] Siehe auch
| (C++11) |
prüft, ob ein Typ ein Zeiger auf eine nicht-statische Memberfunktion oder ein Objekt ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Zeiger auf ein nicht-statisches Member-Objekt ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Zeiger auf eine nicht-statische Memberfunktion ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Arraytyp ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Skalartyp ist (Klassenvorlage) |