2015-12-16 28 views
8

इस विशेष कंटेनर वर्ग कि प्रकार है कि इसके अंदर दोनों कुंजी और मान शामिल संग्रहीत करता है पर विचार करें, तोखाका

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> 
+1

विचार [सिद्धांत में ध्वनि] (http://ideone.com/fgtF5y) है। यह केवल विशेष फ़ंक्शन (रूपांतरण फ़ंक्शन) का नाम सही वर्तनी का विषय हो सकता है। –

+2

[वहां] (http://ideone.com/k1bCEJ), शायद 'const' को हटा दें? –

+1

'ऑपरेटर के कॉन्स' (== 'ऑपरेटर कॉन्स के') एक रूपांतरण समारोह होगा, ठीक है, 'कॉन्स्ट के'। –

उत्तर

5

फ़ंक्शन का नाम बस operator K है। इसकी योग्यता नाम का हिस्सा नहीं है। आज़माएं:

template <typename K, 
      typename T, 
      K (T::*method)() const = &T::operator K> 
//         ^^^^^^^^^^^^^^ 
+2

अच्छा बिंदु: सदस्य का नाम * नहीं * योग्यता (या तर्क) शामिल करता है। यदि अधिभार को हल करना आवश्यक है, तो उसे एक उपयुक्त सदस्य सूचक (जो आसानी से, इस मामले में आसानी से उपलब्ध) में रूपांतरण के माध्यम से किया जाना चाहिए। –

+0

बिल्कुल, ज़ाहिर है। अब जब मैं तर्क के रूप में टी को पॉइंटर का उपयोग करता हूं तो यह काम करता है। मुझे लगता है कि विशेषज्ञता उस के साथ मदद करनी चाहिए। – Resurrection

+0

और मैंने इसे मामलों के लिए समझ लिया जब टी एक सूचक भी है। ओपी में संपादन के रूप में जोड़ा गया। – Resurrection

संबंधित मुद्दे