Chỉ để xem cách nó hoạt động, tôi đã xem xét việc triển khai libstdC++ std::common_type
trong tiêu đề type_traits
. Tôi phải thừa nhận rằng tôi không thực sự hiểu nó hoạt động như thế nào. Dưới đây là:std :: common_type implementation
/// 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;
};
Tôi hiểu rõ cách khai báo đầu tiên, thứ hai và thứ tư hoạt động như thế nào. Tuy nhiên, tôi không thể hiểu cách khai báo thứ ba hoạt động như thế nào. Ai đó có thể cố gắng giải thích cơ chế được sử dụng ở đây?
+1, một bài đọc hay về * ma thuật * bao gồm cả toán tử bậc ba: [Tình trạng có điều kiện: FOREACH redux] (http://www.artima.com/cppsource/foreach.html) –
Ok, tôi nghĩ cuối cùng tôi cũng có lừa. Vì vậy, nó dựa vào thực tế là toán tử bậc ba suy ra các kiểu trả về của nó dựa trên các toán hạng của nó. Nó không nghĩ về điều đó. Cảm ơn! – Morwenn