c++ - Universal reference for a concrete type -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 2 जवाब
मुझे एक फ़ंक्शन है एक ठोस प्रकार के साथ एक सार्वभौमिक संदर्भ तर्क मैं चाहता हूं कि यह सार्वभौमिक संदर्भ होना चाहिए, जब मैं उसमें संग्रहीत मूल्य की जांच करने में दिलचस्पी नहीं रखता हूं, तो मैं एक अस्थायी ऑब्जेक्ट पास कर सकता हूं।
उदाहरण यहाँ है:
bool bCompareData (स्थिरांक uint8_t * ARG_0, स्थिरांक uint8_t * arg_1, size_t & amp; szComparedData) {size_t & amp; i = szComparedData; के लिए (; arg_1 [i]; ++ i) यदि (arg_1 [i]! = Arg_0 [i]) गलत वापसी; वापस सच; }
और संभव फ़ंक्शन को कॉल:
bCompareData (Obj.uIdObject.data (), Ref.uIdTargetObject.data (), size_t ()) // यहाँ हम एक अस्थायी (rvalue) पारित कर रहे हैं / * ________________________ * / size_t लावल; bCompareData (Obj.uIdObject.data (), Ref.uIdTargetObject.data (), lval) // (lvalue) यहाँ हम एक नामित चर गुजर रहे हैं
में ऊपर समारोह घोषणाओं का उपयोग करना पहले फ़ंक्शन कॉल संकलक एक त्रुटि देगा, यदि मैं "आकार_टी और एसज़ कॉम्पेरडेटडेटा" को रैवल्यू संदर्भ "आकार_टी और amp; एसएपी कॉम्प्रेडेटडेटा" में बदलता हूं, तो यह दूसरी कॉल पर असफल हो जायेगा।
अब मुझे जो आवश्यकता है वह यूनिवर्सल है संदर्भ लेकिन मैं यह भी मैं कुलपति ++ U3 2013 संकलक उपयोग कर रहा हूँ मेरे तर्क पर एक ठोस प्रकार के लिए और टेम्पलेट का उपयोग नहीं करना चाहते हैं।
।
यूनिवर्सल संदर्भ केवल परिभाषा के अनुसार टेम्पलेट और प्रकार-कटौती के साथ काम करते हैं आप विशिष्ट प्रकार के संदर्भ को सीमित करने के लिए केवल SFINAE का उपयोग कर सकते हैं:
टेम्पलेट & lt; टाइपनाम एस & gt; Typename std :: enable_if & lt; std :: is_same & LT; typename std :: क्षय & LT; एस & gt; :: प्रकार, size_t & gt; :: मूल्य, bool & gt; :: प्रकार bCompareData (स्थिरांक uint8_t * ARG_0, स्थिरांक uint8_t * arg_1, & amp; & amp; szComparedData) {//। ..}
या, यदि आप वास्तव में टेम्पलेट्स से बचने की आवश्यकता है, तो वैकल्पिक रूप से, आपको अपनी विधि अधिभार की आवश्यकता है:
bool bCompareData (स्थिरांक uint8_t * ARG_0, स्थिरांक uint8_t * arg_1, size_t & amp; szComparedData) {// ...} bool bCompareData (स्थिरांक uint8_t * ARG_0, स्थिरांक uint8_t * arg_1, size_t & amp; & amp; szComparedData) {// ...} < / कोड>
Comments
Post a Comment