में लिखते हैं "इटरेटर" के लिए सामान्य कार्यों लेखन पर्वतमाला मैं आमतौर पर करते हैं:अनुमान प्रकार सी ++
template <typename Iter> auto func(Iter &first, Iter &last)
{
using IterType = typename std::iterator_traits<Iter>::value_type;
...
}
और फिर भी एक तिहाई:
template <typename Iter> auto func(Iter &first, Iter &last)
{
using IterType = typename std::decay<decltype(*first)>::type;
...
}
एक और तरीका हो रहा है
template <typename Iter> auto func(Iter &first, Iter &last)
{
using IterType = typename Iter::value_type;
...
}
iterator_traits
लागू किए बिना।
सिद्धांत रूप में, मेरे कार्यों को केवल first
और last
के रूप में हीटरेटर प्राप्त करना चाहिए और दूसरा फॉर्म आदर्श रूप से (imho) प्रकार प्राप्त करने के लिए सबसे बेवकूफ तरीका होगा। लेकिन typename std::decay<decltype(*first)>::type
Iter
परपरिभाषित करने के लिए प्रतिबंध लगाने के लिए सबसे सामान्य मुहावरे का उपयोग कर रहा है?
मुझे लगता है कि यह मूल्य से इटरेटर को पास करने के लिए मूर्खतापूर्ण है। – Lingxi
यदि 'iterator_traits' कुछ के लिए काम नहीं करता है, तो कहा गया है कि कुछ इटेटरेटर नहीं है। –