std::common_type
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <type_traits> 中定义
|
||
template< class... T > struct common_type; |
(C++11 起) | |
确定各类型
T...
常见的类型,这是所有T...
可以隐式类型转换为. 原文:
Determines the common type among all types
T...
, that is the type all T...
can be implicitly converted to. -
std::common_type
可能是专门为自定义类型,例如std::chrono::time_point.原文:std::common_type
may be specialized for custom types, e.g. std::chrono::time_point. - 对于非专门
std::common_type
,每对之间的常见的类型的规则用于确定T1, T2
是完全相同的规则用于确定返回类型的三元条件运算符T1
和T2
是它的第二个和第三个操作数的类型.原文: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 三元条件运算符 whereT1
andT2
are the types of its second and the third operands. - 对于算术类型,常见的类型也可以被视为类型的(可能是混合模式)的算术表达式,如T0() + T1() + ... + Tn().原文: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().
目录 |
[编辑] 会员类型
姓名
|
Definition |
type
|
所有
T... 常见的类型 |
[编辑] 专业化
自定义的类型特征std::common_type专业是允许的。以下专业的标准库已经提供了
原文:
Custom specializations of the type trait std::common_type are allowed. The following specializations are already provided by the standard library:
专业的std::common_type特征 原文: specializes the std::common_type trait (类模板特化) | |
专业的std::common_type特征 原文: specializes the std::common_type trait (类模板特化) |
[编辑] 注释
随着一个单独的模板参数,
std::common_type<T>::type
正是T
,这使得它在C + +相当于boost::identity<T>
原文:
With a single template argument,
std::common_type<T>::type
is exactly T
, which makes it the C++ equivalent of boost::identity<T>
[编辑] 可能的实现
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; }; |
[编辑] 示例
一个用户定义的类演示混合模式运算
原文:
Demonstrates mixed-mode arithmetic on a user-defined class
#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'; }
输出:
i1i2: 3 i1d2: 4.5 d1i2: 4.3 d1d2: 5.8