std::common_type
来自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; |
(C++11 起) | |
确定各类型
T...常见的类型,这是所有T...可以隐式类型转换为. 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可能是专门为自定义类型,例如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. - 对于非专门
std::common_type,每对之间的常见的类型的规则用于确定T1, T2是完全相同的规则用于确定返回类型的三元条件运算符T1和T2是它的第二个和第三个操作数的类型.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 三元条件运算符 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. - 对于算术类型,常见的类型也可以被视为类型的(可能是混合模式)的算术表达式,如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.
目录 |
[编辑] 会员类型
| 姓名
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
|
所有
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. |
[编辑] 专业化
自定义的类型特征std::common_type专业是允许的。以下专业的标准库已经提供了
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.
| 专业的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. (类模板专业化) | |
| 专业的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. (类模板专业化) | |
[编辑] 注释
随着一个单独的模板参数,
std::common_type<T>::type正是T,这使得它在C + +相当于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.
[编辑] 可能的实现
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; }; |
[编辑] 为例
一个用户定义的类演示混合模式运算
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