std::common_type

来自cppreference.com
< cpp‎ | types

 
 
 
类型的支持
基本类型
基础类型
定宽整数类型 (C++11)
数值极限
C 数值极限接口
运行时类型信息
类型特性
类型类别
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型属性
(C++11)
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++17中过时)
(C++11)
类型特性常量
元函数
(C++17)
受支持操作
关系与属性查询
(C++11)
(C++11)
(C++11)
(C++11)
类型修改
(C++11)
(C++11)
(C++11)
类型变换
(C++11)
(C++11)
(C++17)
common_type
(C++11)
(C++11)(C++17中过时)
(C++17)
 
定义于头文件 <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.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • std::common_type可能是专门为自定义类型,例如std::chrono::time_point.
    原文:
    std::common_type may be specialized for custom types, e.g. std::chrono::time_point.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 对于非专门std::common_type,每对之间的常见的类型的规则用于确定T1, T2是完全相同的规则用于确定返回类型的三元条件运算符T1T2是它的第二个和第三个操作数的类型.
    原文:
    For non-specialized std::common_type, the rules for determining the common type between every pair T1, T2 are exactly the rules for determining the return type of the 三元条件运算符 where T1 and T2 are the types of its second and the third operands.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 对于算术类型,常见的类型也可以被视为类型的(可能是混合模式)的算术表达式,如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().
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

目录

[编辑] 会员类型

姓名
原文:
Name
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
Definition
type
所有T...常见的类型
原文:
the common type for all T...
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 专业化

自定义的类型特征std::common_type专业是允许的。以下专业的标准库已经提供了
原文:
Custom specializations of the type trait std::common_type are allowed. The following specializations are already provided by the standard library:
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
特化的std::common_type特征
原文:
specializes the std::common_type trait
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(类模板特化) [编辑]
专业的std::common_type特征
原文:
specializes the std::common_type trait
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(类模板特化) [编辑]

[编辑] 注释

随着一个单独的模板参数,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>
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 可能的实现

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
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

#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