std::common_type
De cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Defined in header <type_traits>
|
||
| template< class... T > struct common_type; |
(ya que C + +11) | |
Determina el tipo común entre todos los tipos
T..., que es el tipo puede ser todo T... convertir implícitamente . 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_typepuede ser especializada para los tipos personalizados, por ejemplo, std::chrono::time_point .Original:std::common_typemay 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. - Para no especializado
std::common_type, las reglas para la determinación del tipo común entre cada parT1, T2son exactamente las reglas para determinar el tipo de retorno de la operador condicional ternario dondeT1yT2son los tipos de la segunda y tercera los operandos .Original:For non-specializedstd::common_type, the rules for determining the common type between every pairT1, T2are exactly the rules for determining the return type of the operador condicional ternario whereT1andT2are 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. - Para los tipos aritméticos, el tipo común también puede ser visto como el tipo de la expresión aritmética (posiblemente de modo mixto), tales como 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.
Contenido |
[editar] Tipos de miembros
| Nombre
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
|
el tipo común para todos
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. |
[editar] Especializaciones
Especializaciones personalizadas del tipo de rasgo std::common_type están permitidos. Los siguientes especialidades vienen dados por la biblioteca estándar:
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.
| se especializa el rasgo 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. (clase de especialización de plantilla) | |
| se especializa el rasgo 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. (clase de especialización de plantilla) | |
[editar] Notas
Con un argumento de plantilla única,
std::common_type<T>::type es exactamente T, lo que lo convierte en el C + + equivalente de 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.
[editar] Posible implementación
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; }; |
[editar] Ejemplo
Demuestra modo mixto aritmética en una clase definida por el usuario
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