std::is_class
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct is_class; |
(seit C++11) | |
std::is_class ist ein UnaryTypeTrait.
Prüft, ob T ein Nicht-Union-Klassentyp ist. Stellt die Member-Konstante value bereit, die gleich true ist, wenn T ein Klassentyp ist (aber keine Union). Andernfalls ist value gleich false.
Wenn das Programm Spezialisierungen für std::is_class oder std::is_class_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_class_v = is_class<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true, wenn T ein Nicht-Union-Klassentyp 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
namespace detail { template<class T> std::integral_constant<bool, !std::is_union<T>::value> test(int T::*); template<class> std::false_type test(...); } template<class T> struct is_class : decltype(detail::test<T>(nullptr)) {}; |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <type_traits> struct A {}; static_assert(std::is_class<A>::value); class B {}; static_assert(std::is_class_v<B>); static_assert(not std::is_class_v<B*>); static_assert(not std::is_class_v<B&>); static_assert(std::is_class_v<const B>); enum class E {}; static_assert(not std::is_class<E>::value); union U { class UC {}; }; static_assert(not std::is_class_v<U>); static_assert(std::is_class_v<U::UC>); static_assert(not std::is_class_v<int>); static_assert(std::is_class_v<struct S>, "incomplete class"); static_assert(std::is_class_v<class C>, "incomplete class"); int main() {}
[bearbeiten] Siehe auch
| (C++11) |
prüft, ob ein Typ ein Union-Typ ist (Klassenvorlage) |