इस विशेष कंटेनर वर्ग कि प्रकार है कि इसके अंदर दोनों कुंजी और मान शामिल संग्रहीत करता है पर विचार करें, तोखाका
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
कश्मीर एक प्रमुख के प्रकार है, टी मूल्य का एक प्रकार है और विधि पॉइंटर का उपयोग मूल्य से कुंजी को पुनः प्राप्त करने के लिए किया जाता है।
यह ठीक काम करता है, लेकिन मैं विधि सूचक के लिए एक डिफ़ॉल्ट शामिल करने के लिए इतना है कि जब यह कॉल करने वाले को निर्दिष्ट नहीं किया गया यह operator K() const
तो जैसा होगा चाहते हैं:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
लेकिन यह वहाँ बताते हुए संकलन नहीं है no member operator const K on A (<- my class I test this with)
है जब मैं इसे तुरंत चालू करने का प्रयास करता हूं (और ऐसी कोई विधि है)। क्या विधि पॉइंटर टेम्पलेट तर्क का डिफ़ॉल्ट मान भी संभव है? यदि हां, सही वाक्यविन्यास क्या है?
संपादित करें: समाधान के अलावा नीचे है एक मामलों के लिए "ठीक" जब टी एक सूचक नई सी ++ 11 सुविधा std::remove_pointer<T>::type
का उपयोग करता है है, इसलिए:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
विचार [सिद्धांत में ध्वनि] (http://ideone.com/fgtF5y) है। यह केवल विशेष फ़ंक्शन (रूपांतरण फ़ंक्शन) का नाम सही वर्तनी का विषय हो सकता है। –
[वहां] (http://ideone.com/k1bCEJ), शायद 'const' को हटा दें? –
'ऑपरेटर के कॉन्स' (== 'ऑपरेटर कॉन्स के') एक रूपांतरण समारोह होगा, ठीक है, 'कॉन्स्ट के'। –