std::is_integral
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct is_integral; |
(seit C++11) | |
std::is_integral ist ein UnaryTypeTrait.
Prüft, ob T ein integraler Typ ist. Stellt die Member-Konstante value bereit, die gleich true ist, wenn T der Typ bool, char, char8_t(seit C++20), char16_t, char32_t, wchar_t, short, int, long, long long, oder jeder implementierungsdefinierte erweiterte Ganzzahltyp ist, einschließlich aller vorzeichenbehafteten, vorzeichenlosen und cv-qualifizierten Varianten. Andernfalls ist value gleich false.
Wenn das Programm Spezialisierungen für std::is_integral oder std::is_integral_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_integral_v = is_integral<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true, wenn T ein integraler Typ ist, sonst 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
// Note: this implementation uses C++20 facilities template<class T> struct is_integral : std::bool_constant< requires (T t, T* p, void (*f)(T)) // T* parameter excludes reference types { reinterpret_cast<T>(t); // Exclude class types f(0); // Exclude enumeration types p + t; // Exclude everything not yet excluded but integral types }> {}; |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <type_traits> static_assert ( std::is_integral_v<float> == false && std::is_integral_v<int*> == false && std::is_integral_v<int> == true && std::is_integral_v<const int> == true && std::is_integral_v<bool> == true && std::is_integral_v<char> == true ); class A {}; static_assert(std::is_integral_v<A> == false); struct B { int x:4; }; static_assert(std::is_integral_v<B> == false); using BF = decltype(B::x); // bit-field's type static_assert(std::is_integral_v<BF> == true); enum E : int {}; static_assert(std::is_integral_v<E> == false); template <class T> constexpr T same(T i) { static_assert(std::is_integral<T>::value, "Integral required."); return i; } static_assert(same('"') == 042); int main() {}
[bearbeiten] Siehe auch
| (C++20) |
gibt an, dass ein Typ ein ganzzahliger Typ ist (Konzept) |
| [static] |
identifiziert Ganzzahltypen (öffentlich statische Member-Konstante von std::numeric_limits<T>) |
| (C++11) |
prüft, ob ein Typ ein Fließkommatyp ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein arithmetischer Typ ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Aufzählungstyp ist (Klassenvorlage) |