<type_traits>
Definisce i modelli per le costanti in fase di compilazione che forniscono informazioni sulle proprietà dei relativi argomenti di tipo o producono tipi trasformati.
Sintassi
#include <type_traits>
Osservazioni:
Le classi e i modelli in <type_traits> vengono usati per supportare l'inferenza, la classificazione e la trasformazione dei tipi in fase di compilazione. Vengono usati anche per rilevare gli errori correlati al tipo e per ottimizzare il codice generico. I tratti di tipo unario descrivono una proprietà di un tipo, i tratti di tipo binario descrivono una relazione tra tipi e tratti di trasformazione modificano una proprietà di un tipo.
La classe integral_constant
helper e le true_type
relative specializzazioni di modello e false_type
formano le classi di base per i predicati di tipo. Un predicato di tipo è un modello che accetta uno o più argomenti di tipo. Quando un predicato di tipo contiene true, viene derivato pubblicamente, direttamente o indirettamente, da true_type. Quando un predicato di tipo contiene false, viene derivato pubblicamente, direttamente o indirettamente, da false_type.
Un modificatore di tipo o tratto di trasformazione è un modello che accetta uno o più argomenti di modello e include un membro, type
, che è sinonimo di tipo modificato.
Modelli di alias
Per semplificare le espressioni dei tratti di tipo, vengono forniti modelli di alias per typename some_trait<T>::type
, dove some_trait è il nome del modello di classe. Ad esempio, add_const include il modello di alias per il rispettivo tipo add_const_t
, definito come:
template <class T>
using add_const_t = typename add_const<T>::type;
Questi sono gli alias forniti per i type
membri:
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
\
Classi
Classi helper e typedef
Nome | Descrizione |
---|---|
integral_constant | Crea una costante integrale da un tipo e da un valore. |
true_type | Include la costante integrale con valore true. |
false_type | Include la costante integrale con valore false. |
Categorie di tipi primari
Nome | Descrizione |
---|---|
is_void | Verifica se il tipo è void . |
is_null_pointer | Verifica se il tipo è std::nullptr_t . |
is_integral | Verifica se il tipo è integrale. |
is_floating_point | Verifica se il tipo è a virgola mobile. |
is_array | Verifica se il tipo è una matrice. |
is_pointer | Verifica se il tipo è un puntatore. |
is_lvalue_reference | Verifica se il tipo è un riferimento lvalue. |
is_rvalue_reference | Verifica se il tipo è un riferimento rvalue. |
is_member_object_pointer | Verifica se il tipo è un puntatore a un oggetto membro. |
is_member_function_pointer | Verifica se il tipo è un puntatore a una funzione membro. |
is_enum | Verifica se il tipo è un'enumerazione. |
is_union | Verifica se il tipo è un'unione. |
is_class | Verifica se il tipo è una classe. |
is_function | Verifica se il tipo è un tipo di funzione. |
Categorie di tipi compositi
Nome | Descrizione |
---|---|
is_reference | Verifica se il tipo è un riferimento. |
is_arithmetic | Verifica se il tipo è aritmetico. |
is_fundamental | Verifica se il tipo è void o aritmetico. |
is_object | Verifica se il tipo è un tipo di oggetto. |
is_scalar | Verifica se il tipo è scalare. |
is_compound | Verifica se il tipo non è scalare. |
is_member_pointer | Verifica se il tipo è un puntatore a un membro. |
Proprietà del tipo
Nome | Descrizione |
---|---|
is_const | Verifica se il tipo è const . |
is_volatile | Verifica se il tipo è volatile . |
is_trivial | Verifica se il tipo è semplice. |
is_trivially_copyable | Verifica se il tipo è facilmente copiabile. |
is_standard_layout | Verifica se il tipo è un tipo di layout standard. |
is_pod | Verifica se il tipo è un POD. |
is_literal_type | Verifica se il tipo può essere una variabile constexpr o usato in una funzione constexpr . |
is_empty | Verifica se il tipo è una classe vuota. |
is_polymorphic | Verifica se il tipo è una classe polimorfica. |
is_abstract | Verifica se il tipo è una classe astratta. |
is_final | Verifica se il tipo è un tipo di classe contrassegnato come final . |
is_aggregate | |
is_signed | Verifica se il tipo è un intero con segno. |
is_unsigned | Verifica se il tipo è un intero senza segno. |
is_constructible | Verifica se il tipo è costruibile mediante i tipi di argomento specificati. |
is_default_constructible | Verifica se il tipo ha un costruttore predefinito. |
is_copy_constructible | Verifica se il tipo ha un costruttore di copia. |
is_move_constructible | Verifica se il tipo ha un costruttore di spostamento. |
is_assignable | Verifica se al primo tipo può essere assegnato un valore del secondo tipo. |
is_copy_assignable | Verifica se al primo tipo può essere assegnato un valore del secondo tipo. |
is_move_assignable | Verifica se al primo tipo può essere assegnato un riferimento rvalue del tipo. |
is_swappable | |
is_swappable_with | |
is_destructible | Verifica se il tipo è destructible. |
is_trivially_constructible | Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito mediante i tipi specificati. |
is_trivially_default_constructible | Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito per impostazione predefinita. |
is_trivially_copy_constructible | Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito mediante copia. |
is_trivially_move_constructible | Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito mediante spostamento. |
is_trivially_assignable | Verifica se i tipi sono assegnabili e se l'assegnazione non usa alcuna operazione non semplice. |
is_trivially_copy_assignable | Verifica se il tipo è assegnabile mediante copia e se l'assegnazione non usa alcuna operazione non semplice. |
is_trivially_move_assignable | Verifica se il tipo è assegnabile mediante spostamento e se l'assegnazione non usa alcuna operazione non semplice. |
is_trivially_destructible | Verifica se il tipo è distruttibile e se il distruttore non usa alcuna operazione non semplice. |
is_nothrow_constructible | Verifica se il tipo è costruibile ed è noto come tipo che non genera eccezioni quando viene costruito mediante i tipi specificati. |
is_nothrow_default_constructible | Verifica se il tipo è costruibile per impostazione predefinita ed è noto come tipo che non genera eccezioni quando viene costruito per impostazione predefinita. |
is_nothrow_copy_constructible | Verifica se il tipo è costruibile mediante copia e se il costruttore di copia è noto come elemento che non genera eccezioni. |
is_nothrow_move_constructible | Verifica se il tipo è costruibile mediante spostamento e se il costruttore di spostamento è noto come elemento che non genera eccezioni. |
is_nothrow_assignable | Verifica se il tipo è assegnabile mediante il tipo specificato e se l'assegnazione è nota come operazione che non genera eccezioni. |
is_nothrow_copy_assignable | Verifica se il tipo è assegnabile mediante copia e se l'assegnazione è nota come operazione che non genera eccezioni. |
is_nothrow_move_assignable | Verifica se il tipo è assegnabile mediante spostamento e se l'assegnazione è nota come operazione che non genera eccezioni. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Verifica se il tipo è distruttibile e se il distruttore è noto come elemento che non genera eccezioni. |
has_virtual_destructor |
Verifica se il tipo ha un distruttore virtuale. |
has_unique_object_representations |
|
is_invocable | Verifica se è possibile richiamare un tipo chiamabile usando i tipi di argomento specificati. Aggiunta in C++17. |
is_invocable_r | Verifica se un tipo chiamabile può essere richiamato utilizzando i tipi di argomento specificati e il risultato è convertibile nel tipo specificato. Aggiunta in C++17. |
is_nothrow_invocable | Verifica se un tipo chiamabile può essere richiamato utilizzando i tipi di argomento specificati e non genera eccezioni. Aggiunta in C++17. |
is_nothrow_invocable_r | Verifica se un tipo chiamabile può essere richiamato utilizzando i tipi di argomento specificati e non genera eccezioni e il risultato è convertibile nel tipo specificato. Aggiunta in C++17. |
Query sulle proprietà del tipo
Nome | Descrizione |
---|---|
alignment_of | Ottiene l'allineamento di un tipo. |
rank | Ottiene il numero di dimensioni della matrice. |
extent | Ottiene il numero di elementi nella dimensione di matrice specificata. |
Relazioni tra i tipi
Nome | Descrizione |
---|---|
is_same | Verifica se due tipi sono uguali. |
is_base_of | Verifica se un tipo è una base di un altro tipo. |
is_convertible | Verifica se il tipo è convertibile in un altro tipo. |
Modifiche costante-volatile
Nome | Descrizione |
---|---|
add_const | Genera un tipo const dal tipo. |
add_volatile | Genera un tipo volatile dal tipo. |
add_cv | Genera un tipo const volatile dal tipo. |
remove_const | Genera un tipo non costante dal tipo. |
remove_volatile | Genera un tipo non volatile dal tipo. |
remove_cv | Genera un tipo non costante non volatile dal tipo. |
Modifiche dei riferimenti
Nome | Descrizione |
---|---|
add_lvalue_reference | Genera un riferimento al tipo dal tipo. |
add_rvalue_reference | Genera un riferimento rvalue al tipo dal tipo. |
remove_reference | Genera un tipo di non riferimento dal tipo. |
Modifiche della firma
Nome | Descrizione |
---|---|
make_signed | Genera il tipo se con segno, ovvero il più piccolo tipo con segno di dimensioni maggiori o uguali al tipo. |
make_unsigned | Genera il tipo se senza segno, ovvero il più piccolo tipo senza segno di dimensioni maggiori o uguali al tipo. |
Modifiche delle matrici
Nome | Descrizione |
---|---|
remove_all_extents | Genera un tipo non matrice da un tipo matrice. |
remove_extent | Genera il tipo di elemento da un tipo matrice. |
Modifiche dei puntatori
Nome | Descrizione |
---|---|
add_pointer | Genera un puntatore al tipo dal tipo. |
remove_pointer | Genera un tipo da un puntatore al tipo. |
Altre trasformazioni
Nome | Descrizione |
---|---|
aligned_storage | Alloca memoria non inizializzata per un tipo allineato. |
aligned_union | Alloca memoria non inizializzata per un'unione allineata con un costruttore o un distruttore non semplice. |
common_type | Genera il tipo comune di tutti i tipi di pacchetto di parametri. |
conditional | Se la condizione è true, genera il primo tipo specificato, altrimenti genera il secondo. |
decay | Genera il tipo come passato da valore. Crea un tipo di non riferimento, non constante o non volatile oppure crea un puntatore al tipo. |
enable_if | Se la condizione è true, genera il primo tipo specificato, altrimenti non genera alcun tipo. |
invoke_result | Determina il tipo restituito del tipo chiamabile che accetta i tipi di argomento specificati. Aggiunta in C++17. |
result_of | Determina il tipo restituito del tipo chiamabile che accetta i tipi di argomento specificati. Aggiunta in C++14, deprecata in C++17. |
underlying_type | Genera il tipo integrale sottostante per un tipo di enumerazione. |
Tratti dell'operatore logico
Nome | Descrizione |
---|---|
congiunzione | |
disgiunzione | |
negazione |