यह देखने के लिए कि यह कैसे काम करता है, मैंने हेडर type_traits
में std::common_type
के libstdC++ कार्यान्वयन को देखा। मुझे यह मानना है कि मैं वास्तव में समझ नहीं पा रहा हूं कि यह कैसे काम करता है। यहां यह है: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, टर्नरी ऑपरेटर सहित * जादू * पर एक अच्छा पठन: [सशर्त प्यार: फोरएच रेडक्स] (http://www.artima.com/cppsource/foreach.html) –
ठीक है, मुझे लगता है कि मुझे अंत में मिला चाल। तो यह इस तथ्य पर निर्भर करता है कि टर्नरी ऑपरेटर अपने ऑपरेटरों के आधार पर अपने रिटर्न प्रकार को कम करता है। यह उस बारे में नहीं सोचा था। धन्यवाद! – Morwenn