只是爲了看看它是如何工作的,我看着在頭type_traits
中的libstdC++實現的std::common_type
。我不得不承認我不太瞭解它是如何工作的。這裏是:的std :: common_type實施
/// common_type
template<typename... _Tp>
struct common_type;
template<typename _Tp>
struct common_type<_Tp>
{ typedef _Tp type; };
template<typename _Tp, typename _Up>
struct common_type<_Tp, _Up>
{ typedef decltype(true ? declval<_Tp>() : declval<_Up>()) type; };
template<typename _Tp, typename _Up, typename... _Vp>
struct common_type<_Tp, _Up, _Vp...>
{
typedef typename
common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
};
我很好理解第一,第二和第四聲明是如何工作的。但是,我無法理解第三個聲明是如何工作的。有人可以試着解釋這裏使用的機制嗎?
+1,一個不錯的閱讀* magic *,包括三元運算符:[Conditional Love:FOREACH redux](http://www.artima.com/cppsource/foreach.html) –
好的,我想我終於得到了訣竅。所以它依賴於三元運算符根據它的操作數推斷它的返回類型的事實。它沒有想到這一點。謝謝! – Morwenn