std::is_object
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct is_object; |
(seit C++11) | |
std::is_object ist ein UnaryTypeTrait.
Wenn T ein Objekttyp ist (d.h. jeder möglicherweise cv-qualifizierte Typ außer Funktions-, Referenz- oder void-Typen), stellt er die Mitgliedskonstante value gleich true bereit. Für jeden anderen Typ ist value false.
Wenn das Programm Spezialisierungen für std::is_object oder std::is_object_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_object_v = is_object<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true, wenn T ein Objekttyp 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> |
[edit] Mögliche Implementierung
template<class T> struct is_object : std::integral_constant<bool, std::is_scalar<T>::value || std::is_array<T>::value || std::is_union<T>::value || std::is_class<T>::value> {}; |
[edit] Beispiel
Führen Sie diesen Code aus
#include <iomanip> #include <iostream> #include <type_traits> #define IS_OBJECT(...) \ std::cout << std::boolalpha << std::left << std::setw(9) << #__VA_ARGS__ \ << (std::is_object_v<__VA_ARGS__> ? " is object\n" \ : " is not an object\n") int main() { class cls {}; IS_OBJECT(void); IS_OBJECT(int); IS_OBJECT(int&); IS_OBJECT(int*); IS_OBJECT(int*&); IS_OBJECT(cls); IS_OBJECT(cls&); IS_OBJECT(cls*); IS_OBJECT(int()); IS_OBJECT(int(*)()); IS_OBJECT(int(&)()); }
Ausgabe
void is not an object int is object int& is not an object int* is object int*& is not an object cls is object cls& is not an object cls* is object int() is not an object int(*)() is object int(&)() is not an object
[edit] Siehe auch
| (C++11) |
prüft, ob ein Typ ein Skalartyp ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Arraytyp ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Union-Typ ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Nicht-Union-Klassentyp ist (Klassenvorlage) |