मैं टेम्पलेट के साथ कुछ वर्ग ने लिखा है:std :: हैश टेम्पलेट आंशिक विशेषज्ञता
template <class T, class Allocator = ::std::allocator<T> >
class my_list;
मैं लिखना चाहिए :: इस वर्ग के लिए std :: हैश specializtion। मैं उसे कैसे कर सकता हूँ? सरल आंशिक विशेषज्ञता:
namespace std {
template <class T, class Allocator>
class hash<my_list<T, Allocator> >{
public :
size_t operator()(const my_list<T, Allocator> &x) const{
return ...;
}
};
}
लेकिन मैं नहीं साधारण आंशिक विशेषज्ञता है, क्योंकि यह सी ++ आईएसओ द्वारा निषिद्ध लिख सकते हैं:
आईएसओ/आईईसी 14882 तीसरा संस्करण 2011-09-01
17.6.4.2.1 नेमस्पेस std [namespace.std]
2 सी ++ प्रोग्राम का व्यवहार अपरिभाषित है यदि यह घोषित करता है ... किसी भी सदस्य वर्ग टेम्पलेट का स्पष्ट या आंशिक विशेषज्ञता मानक पुस्तकालय वर्ग या कक्षा टेम्पलेट।
मैं क्या कर सकता हूं?
मुझे याद है कि सी ++ उपयोगकर्ता के लिए आंशिक विशेषज्ञता ":: std :: स्वैप (टी और, टी और)" को परिभाषित नहीं कर सकते। उन्हें नाम "टेम्प्लेट <कक्षा ए, कक्षा बी> कक्षा टी" के साथ नामस्थान पर नया स्वैप फ़ंक्शन परिभाषित करना चाहिए। मैंने सोचा कि यह वही स्थिति है। – user3098730
@ user3098730 'std :: swap' एक * फ़ंक्शन * टेम्पलेट है, न कि * * * टेम्पलेट। फ़ंक्शन टेम्पलेट्स आंशिक रूप से विशिष्ट नहीं हो सकते हैं; यह भाषा के नियमों से मिलता है और 'std' से कोई लेना देना नहीं है। – Angew