क्या हम कई प्रकार के रिटर्न के साथ कार्य कर सकते हैं?(C++ 11 और इसके बाद के संस्करण)




function c++11 (2)

यहाँ std:: variant साथ एक उदाहरण समाधान है

template < typename T, typename X> 
std::variant<T, X>  Max_Number ( T valueA, X valueB )
{
    std::variant<T, X> res;
    if ( valueA > valueB ) 
       res = valueA; 
    else 
       res = valueB; 
    return res;
}

मैं एक जेनेरिक फ़ंक्शन लिखने की कोशिश कर रहा हूं, जो uint8 , uint16 , uint32 , uint64 रूप में इनपुट लेता है, .... और सबसे बड़े तत्व के डेटाटाइप के साथ अधिकतम मान लौटाता है?

उदाहरण के लिए:

template < typename T, typename X>
auto Max_Number(T valueA, X valueB)
{
    if (valueA > valueB)
        return valueA;
    else
        return valueB;
}

पुनश्च: यह उदाहरण मानता है कि सबसे बड़ा तत्व सबसे बड़ा डेटाटाइप है।


वापसी प्रकार को संकलन-समय पर निर्धारित किया जाना चाहिए। आप std::common_type (C ++ 11 से) का उपयोग कर सकते हैं:

अंकगणित प्रकार पदोन्नति के अधीन नहीं होने के लिए, सामान्य प्रकार को T0() + T1() + ... + Tn() रूप में (संभवतः मिश्रित-मोड) अंकगणितीय अभिव्यक्ति के प्रकार के रूप में देखा जा सकता है।

template < typename T, typename X>
typename std::common_type<T, X>::type Max_Number ( T valueA, X valueB ) {
    ...
}

या std::conditional (C ++ 11 के बाद से) वापसी प्रकार को बड़ा घोषित करने के लिए (जिसका sizeof अधिक है) का उपयोग करें।

template < typename T, typename X>
typename std::conditional<sizeof(T) >= sizeof(X), T, X>::type Max_Number ( T valueA, X valueB ) {
    ...
}

ध्यान दें कि इस स्थिति के लिए, यदि T और X का आकार समान है, तो T हमेशा रिटर्न प्रकार के रूप में उपयोग किया जाएगा। यदि आप इसे और अधिक सटीक रूप से नियंत्रित करना चाहते हैं, तो आप सटीक प्रकार को निर्दिष्ट करने के लिए कुछ लक्षणों का उपयोग कर सकते हैं।





return-type