Sdílet prostřednictvím


<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, typecož 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_tdefinovanou 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

Jméno 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

Jméno popis
is_void Testuje, zda je voidtyp .
is_null_pointer Testuje, zda je std::nullptr_ttyp .
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

Jméno 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

Jméno popis
is_const Testuje, zda je consttyp .
is_volatile Testuje, zda je volatiletyp .
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

Jméno popis
alignment_of Získá zarovnání typu.
Hodnost Získá počet dimenzí pole.
Rozsahu Získá počet prvků v zadané maticové dimenzi.

Vztahy typů

Jméno 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

Jméno 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ů

Jméno 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ů

Jméno 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

Jméno popis
remove_all_extents Vytvoří typ bez pole z typu pole.
remove_extent Vytvoří typ prvku z typu pole.

Úpravy ukazatele

Jméno popis
add_pointer Vytvoří ukazatel na typ.
remove_pointer Vytvoří typ z ukazatele na typ.

Další transformace

Jméno 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.
Kaz 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

Jméno popis
Spojení
Součet
Negace

Viz také

<Funkční>