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、2番目と3番目のオペランドのタイプがあります.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. (クラステンプレートの特殊化の2つの値を比較します) | |
| 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. (クラステンプレートの特殊化の2つの値を比較します) | |
[編集] ノート
単一のテンプレート引数を指定すると、
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