std::common_type
Da cppreference.com.
![]() |
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.
La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
Elemento definito nell'header <type_traits>
|
||
template< class... T > struct common_type; |
(dal C++11) | |
Determina il tipo di comune tra tutti i tipi di
T...
, che è il tipo di tutte le T...
può essere convertito in modo implicito. Original:
Determines the common type among all types
T...
, that is the type all T...
can be implicitly converted to. The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
-
std::common_type
possono essere specializzati per tipi personalizzati, ad es std::chrono::time_point.Original:std::common_type
may be specialized for custom types, e.g. std::chrono::time_point.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Per non specializzato
std::common_type
, le regole per la determinazione del tipo comune tra ogni coppiaT1, T2
sono esattamente le regole per determinare il tipo di ritorno del operatore condizionale ternario doveT1
eT2
sono i tipi del suo secondo e del terzo operandi.Original:For non-specializedstd::common_type
, the rules for determining the common type between every pairT1, T2
are exactly the rules for determining the return type of the operatore condizionale ternario whereT1
andT2
are the types of its second and the third operands.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Per i tipi aritmetici, il tipo comune può anche essere visto come il tipo di (eventualmente a modalità mista) espressione aritmetica come T0() + T1() + ... + Tn().Original:For arithmetic types, the common type may also be viewed as the type of the (possibly mixed-mode) arithmetic expression such as T0() + T1() + ... + Tn().The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica] Membri tipi
Nome
Original: Name The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Definition |
type
|
il tipo comune per tutti
T... Original: the common type for all T... The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[modifica] Specializzazioni
Specializzazioni personalizzate del tipo di carattere std::common_type sono ammessi. Le specializzazioni sono già fornite dalla libreria standard:
Original:
Custom specializations of the type trait std::common_type are allowed. The following specializations are already provided by the standard library:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
specializzata il tratto std::common_type Original: specializes the std::common_type trait The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (classe modello di specializzazione) | |
specializzata il tratto std::common_type Original: specializes the std::common_type trait The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (classe modello di specializzazione) |
[modifica] Note
Con un argomento singolo modello,
std::common_type<T>::type
è esattamente T
, che lo rende il C + + equivalente di boost::identity<T>
Original:
With a single template argument,
std::common_type<T>::type
is exactly T
, which makes it the C++ equivalent of boost::identity<T>
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Possibile implementazione
template<class ...T> struct common_type; template<class T> struct common_type<T> { typedef T type; }; template<class T, class U> struct common_type<T, U> { typedef decltype(true ? declval<T>() : declval<U>()) type; }; template<class T, class U, class... V> struct common_type<T, U, V...> { typedef typename common_type<typename common_type<T, U>::type, V...>::type type; }; |
[modifica] Esempio
Viene illustrato in modalità mista aritmetica su una classe definita dall'utente
Original:
Demonstrates mixed-mode arithmetic on a user-defined class
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream> #include <type_traits> template<class T> struct Number { T n; }; template<class T, class U> Number<typename std::common_type<T, U>::type> operator+(const Number<T>& lhs, const Number<U>& rhs) { return {lhs.n + rhs.n}; } int main() { Number<int> i1 = {1}, i2 = {2}; Number<double> d1 = {2.3}, d2 = {3.5}; std::cout << "i1i2: " << (i1 + i2).n << "\ni1d2: " << (i1 + d2).n << '\n' << "d1i2: " << (d1 + i2).n << "\nd1d2: " << (d1 + d2).n << '\n'; }
Output:
i1i2: 3 i1d2: 4.5 d1i2: 4.3 d1d2: 5.8