मेरे पास एक टेम्पलेट फ़ंक्शन है जहां एक enum प्रकार को इसके अंतर्निहित प्रकार में परिवर्तित किया जाता है जो ठीक काम करता है, लेकिन मैंने एक अधिभार लिखा है जिसे एक अभिन्न संख्या लेनी चाहिए और इसे वापस करना चाहिए और यह देना मुझे एक त्रुटि है कि int एक गणना प्रकार नहीं है। मेरे टेम्पलेट में, इसे फ़िल्टर किया जाना चाहिए था। गलत क्या है?प्रकार से उसी प्रकार से "रूपांतरण" त्रुटि
template <typename TT>
static constexpr auto get_value(TT t)
-> typename std::enable_if<!std::is_enum<TT>::value, TT>::type
{
return t;
}
template <typename TT>
static constexpr auto get_value(TT t)
-> typename std::enable_if<std::is_enum<TT>::value, typename std::underlying_type<TT>::type>::type
{
return (typename std::underlying_type<TT>::type)t;
}
मैं अगर 'underlying_type' SFINAE के अनुकूल है पता नहीं है, लेकिन वहाँ एक [वैकल्पिक हल] (http://coliru.stacked-crooked.com/a/e7f1dd3b75c8d9c2) कि –
क्या है? मुझे लगता है कि यह काम करता है, लेकिन यहां क्या चल रहा है जो इसे काम करता है? और SFINAE द्वारा दोस्ताना 'अंतर्निहित_टाइप' क्यों नहीं होगा? – Adrian
'std :: underlying_type का तत्काल :: टाइप' स्थगित कर दिया गया है, ताकि 'enable_if' पहले विफल हो सके। * SFINAE- अनुकूल * मेरा मतलब है कि किसी भी प्रतिस्थापन विफलता केवल तत्काल संदर्भ में होती है (यदि यह 'अंतर्निहित_type' के अंदर होती है तो यह स्वयं SFINAE- अनुकूल नहीं है)। –