<type_traits>
Definuje šablony pro konstanty kompilace, které poskytují informace o vlastnostech argumentů jejich typu nebo vytvářejí transformované typy.
Syntaxe
#include <type_traits>
Poznámky
Třídy a šablony v <type_traits> slouží k podpoře odvození typu, klasifikace a transformace v době kompilace. Používají se také ke zjišťování chyb souvisejících s typem a k optimalizaci obecného kódu. Unární typy vlastnosti popisují vlastnost typu, binární typ vlastnosti popisují vztah mezi typy a transformační vlastnosti upravují vlastnost typu.
Pomocná třída integral_constant
a její specializace šablony true_type
a false_type
tvoří základní třídy pro predikáty typu. Predikát typu je šablona, která přebírá jeden nebo více argumentů typu. Pokud predikát typu obsahuje true, je veřejně odvozený přímo nebo nepřímo z true_type. Pokud predikát typu obsahuje false, je veřejně odvozený přímo nebo nepřímo z false_type.
Modifikátor typu nebo vlastnost transformace je šablona, která přebírá jeden nebo více argumentů šablony a má jeden člen, type
což je synonymum pro upravený typ.
Šablony aliasů
Pro zjednodušení výrazů typových vlastností jsou k dispozici šablony aliasů, kde some_trait je název šablony třídy. typename some_trait<T>::type
Například add_const má šablonu aliasu pro její typ, add_const_t
definovanou takto:
template <class T>
using add_const_t = typename add_const<T>::type;
Toto jsou poskytnuté aliasy pro type
členy:
add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t
\
common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t
\
remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t
\
Třídy
Pomocná třída a typedefs
Název | Popis |
---|---|
integral_constant | Vytvoří celočíselnou konstantu z typu a hodnoty. |
true_type | Obsahuje celočíselnou konstantu se skutečnou hodnotou. |
false_type | Obsahuje celočíselnou konstantu s hodnotou false. |
Kategorie primárního typu
Název | Popis |
---|---|
is_void | Testuje, zda je void typ . |
is_null_pointer | Testuje, zda je std::nullptr_t typ . |
is_integral | Testuje, zda je typ integrální. |
is_floating_point | Testuje, zda je typ plovoucí desetinou čárkou. |
is_array | Testuje, zda je typ pole. |
is_pointer | Testuje, zda je typ ukazatelem. |
is_lvalue_reference | Testuje, zda je typem odkaz lvalue. |
is_rvalue_reference | Testuje, zda typ je odkaz rvalue. |
is_member_object_pointer | Testuje, zda je typ ukazatelem na členský objekt. |
is_member_function_pointer | Testuje, zda je typ ukazatelem na členovou funkci. |
is_enum | Testuje, zda je typ výčtem. |
is_union | Testuje, zda je typ sjednocení. |
is_class | Testuje, zda typ je třída. |
is_function | Testuje, zda je typ funkce. |
Kategorie složeného typu
Název | Popis |
---|---|
is_reference | Testuje, zda je typ odkazem. |
is_arithmetic | Testuje, zda je typ aritmetický. |
is_fundamental | Testuje, zda je void typ nebo aritmetický. |
is_object | Testuje, zda je typ objektu. |
is_scalar | Testuje, zda je typ skalární. |
is_compound | Testuje, zda typ není skalární. |
is_member_pointer | Testuje, zda je typ ukazatelem na člen. |
Vlastnosti typu
Název | Popis |
---|---|
is_const | Testuje, zda je const typ . |
is_volatile | Testuje, zda je volatile typ . |
is_trivial | Testuje, zda je typ triviální. |
is_trivially_copyable | Testuje, zda je typ triviálně kopírovatelný. |
is_standard_layout | Testuje, zda je typ standardního typu rozložení. |
is_pod | Testuje, zda je typ POD. |
is_literal_type | Testuje, zda typ může být proměnná constexpr nebo použitá ve constexpr funkci. |
is_empty | Testuje, zda typ je prázdná třída. |
is_polymorphic | Testuje, zda typ je polymorfní třída. |
is_abstract | Testuje, zda je typ abstraktní třídou. |
is_final | Testuje, zda typ je typ třídy označen final . |
is_aggregate | |
is_signed | Testuje, zda je typ celé číslo se signed. |
is_unsigned | Testuje, zda je typ celé číslo bez znaménka. |
is_constructible | Testuje, zda je typ konstruktovatelný pomocí zadaných typů argumentů. |
is_default_constructible | Testuje, zda typ má výchozí konstruktor. |
is_copy_constructible | Testuje, zda typ má konstruktor kopírování. |
is_move_constructible | Testuje, zda typ má konstruktor přesunutí. |
is_assignable | Testuje, zda je možné prvnímu typu přiřadit hodnotu druhého typu. |
is_copy_assignable | Testuje, zda je možné přiřadit typ const referenční hodnotu typu. |
is_move_assignable | Testuje, zda může být typ přiřazen rvalue odkaz typu. |
is_swappable | |
is_swappable_with | |
is_destructible | Testuje, zda je typ destrukovatelný. |
is_trivially_constructible | Testuje, zda typ nepoužívá žádné jiné než triviální operace při vytváření pomocí zadaných typů. |
is_trivially_default_constructible | Testuje, zda typ při vytváření výchozích ne triviálních operací nepoužívá žádné nevýkonné operace. |
is_trivially_copy_constructible | Testuje, zda typ při vytváření kopírování nepoužívá žádné jiné než triviální operace. |
is_trivially_move_constructible | Testuje, zda typ při vytváření přesunu nepoužívá žádné jiné než triviální operace. |
is_trivially_assignable | Testuje, zda jsou typy přiřaditelné a přiřazení nepoužívá žádné triviální operace. |
is_trivially_copy_assignable | Testuje, zda je typ přiřazený a přiřazení nepoužívá žádné triviální operace. |
is_trivially_move_assignable | Testuje, zda je typ možné přiřadit a přiřazení nepoužívá žádné triviální operace. |
is_trivially_destructible | Testuje, zda je typ destrukovatelný a destruktor nepoužívá žádné triviální operace. |
is_nothrow_constructible | Testuje, zda je typ konstruktovatelný a je známo, že není vyvolána při vytváření pomocí zadaných typů. |
is_nothrow_default_constructible | Testuje, zda je typ výchozí konstruktovatelný a je známo, že není vyvolána při výchozí konstrukce. |
is_nothrow_copy_constructible | Testuje, zda je typ copy konstruktible a konstruktor kopírování není známo, že vyvolá. |
is_nothrow_move_constructible | Testuje, zda je typ move konstruktible a konstruktor move není známý jako vyvolání. |
is_nothrow_assignable | Testuje, zda je typ přiřaditelný pomocí zadaného typu a přiřazení není známo, že vyvolá. |
is_nothrow_copy_assignable | Testuje, zda typ je možné přiřaditelné a přiřazení není známo, že vyvolá. |
is_nothrow_move_assignable | Testuje, zda je typ možné přiřadit a přiřazení není známo, že vyvolá. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Testuje, zda je typ destrukovatelný a destruktor není znám jako vyvolání. |
has_virtual_destructor |
Testuje, zda typ má virtuální destruktor. |
has_unique_object_representations |
|
is_invocable | Testuje, zda lze volatelný typ pomocí zadaných typů argumentů. Přidáno v jazyce C++17. |
is_invocable_r | Testuje, zda lze volatelný typ pomocí zadaných typů argumentů a výsledek je převoditelný na zadaný typ. Přidáno v jazyce C++17. |
is_nothrow_invocable | Testuje, zda lze vyvolat volatelný typ pomocí zadaných typů argumentů a není známo, že vyvolá výjimky. Přidáno v jazyce C++17. |
is_nothrow_invocable_r | Testuje, zda lze volatelný typ pomocí zadaných typů argumentů a není známo, že vyvolá výjimky, a výsledek je převoditelný na zadaný typ. Přidáno v jazyce C++17. |
Dotazy na vlastnosti typu
Název | Popis |
---|---|
alignment_of | Získá zarovnání typu. |
hodnost | Získá počet dimenzí pole. |
rozsah | Získá počet prvků v zadané maticové dimenzi. |
Vztahy typů
Název | Popis |
---|---|
is_same | Testuje, jestli jsou dva typy stejné. |
is_base_of | Testuje, jestli je jeden typ základem jiného typu. |
is_convertible | Testuje, zda je jeden typ konvertibilní na jiný. |
Konstantní nestálé úpravy
Název | Popis |
---|---|
add_const | const Vytvoří typ z typu. |
add_volatile | volatile Vytvoří typ z typu. |
add_cv | const volatile Vytvoří typ z typu. |
remove_const | Vytvoří typ, který není typu const. |
remove_volatile | Vytvoří nevolatilní typ z typu. |
remove_cv | Vytvoří non-const non-volatile typ z typu. |
Úpravy odkazů
Název | Popis |
---|---|
add_lvalue_reference | Vytvoří odkaz na typ z typu. |
add_rvalue_reference | Vytvoří odkaz rvalue na typ z typu. |
remove_reference | Vytvoří nenákazový typ z typu. |
Změny podepisů
Název | Popis |
---|---|
make_signed | Vytvoří typ, pokud je podepsaný, nebo nejmenší typ se šiménem větší nebo rovnou velikosti. |
make_unsigned | Vytvoří typ, pokud je bez znaménka nebo nejmenší nepodepsaný typ větší nebo roven velikosti, která se má zadat. |
Úpravy pole
Název | Popis |
---|---|
remove_all_extents | Vytvoří typ bez pole z typu pole. |
remove_extent | Vytvoří typ prvku z typu pole. |
Úpravy ukazatele
Název | Popis |
---|---|
add_pointer | Vytvoří ukazatel na typ. |
remove_pointer | Vytvoří typ z ukazatele na typ. |
Další transformace
Název | Popis |
---|---|
aligned_storage | Přidělí neinicializovanou paměť pro zarovnaný typ. |
aligned_union | Přidělí neinicializovanou paměť pro zarovnanou sjednocení s nevýznamným konstruktorem nebo destruktorem. |
common_type | Vytvoří společný typ všech typů sady parametrů. |
podmíněný | Pokud je podmínka pravdivá, vytvoří první zadaný typ, jinak druhý zadaný typ. |
hnít | Vytvoří typ předaný hodnotou. Neukazuje na typ, nekonstanční typ nebo nevolatilní typ nebo ukazatel na typ. |
enable_if | Pokud je podmínka pravdivá, vytvoří zadaný typ, jinak žádný typ. |
invoke_result | Určuje návratový typ volatelného typu, který přebírá zadané typy argumentů. Přidáno v jazyce C++17. |
result_of | Určuje návratový typ volatelného typu, který přebírá zadané typy argumentů. Přidáno v jazyce C++14, zastaralé v jazyce C++17. |
underlying_type | Vytvoří základní celočíselný typ pro typ výčtu. |
Vlastnosti logického operátoru
Název | Popis |
---|---|
spojka | |
disjunkce | |
negace |