के माध्यम से एक इटरेटर के मूल्य की घोषणा करने के लिए सी ++ 98, मैं आम तौर पर एक इटरेटर का मान प्रकार में एक चर घोषित करने के लिए निम्नलिखित का उपयोग करें:कैसे decltype
typename std::iterator_traits<Iterator>::value_type value;
सी ++ 11 में हम decltype है और मैं मान प्रकार निकालना सबसे आसान तरीका सोचा था है:
decltype(*iterator) value;
दुर्भाग्य से सबसे iterators के लिए
, * के इटरेटर प्रकार VALUE_TYPE & और VALUE_TYPE नहीं है। प्रकार के संशोधन वर्गों के बिना, किसी भी विचार, उपरोक्त मालिश करने के लिए value_type (और कोई संदर्भ नहीं) में मालिश करने के लिए कैसे?
मुझे नहीं लगता कि प्रश्न अनुचित है क्योंकि निम्नलिखित काफी मजबूत है लेकिन एक और चर बनाने के लिए समाप्त होता है।
auto x = *iterator;
decltype(x) value;
भी ध्यान रखें कि मैं वास्तव में deduced प्रकार चाहते हैं और न सिर्फ एक उदाहरण उदा अगर मैं इन मूल्यों के std :: वेक्टर घोषित करना चाहता था।
अभिव्यक्ति के प्रकार का उपयोग किया था '* iterator' है' std :: iterator_traits :: reference', नहीं 'value_type'। यह आवश्यक नहीं है 'value_type & ', और' decltype' अभिव्यक्ति के प्रकार की रिपोर्ट अलग-अलग रूप से इसकी मूल्य श्रेणी के आधार पर रिपोर्ट कर सकता है। –
यदि आप * बस * अपने संपादन की दो पंक्तियों को जोड़ना चाहते हैं, तो समतुल्य 'typename std :: क्षय :: प्रकार मान;', लेकिन नीचे दिए गए उत्तर को देखें और केवल ' यह मत करो :) मैं इसे सिर्फ ['std :: decay'] के रूप में जोड़ रहा हूं (http://en.cppreference.com/w/cpp/types/decay) इस क्यू/ए में पहले उल्लेख नहीं किया गया था। –