मैं अपने कस्टम प्रकारों को लेने के लिए एसटीएल कार्यान्वयन की अनुमति कैसे दूं? MSVC पर, वहाँ एक वर्ग std::tr1::hash
, जो मैं आंशिक रूप सेकस्टम प्रकारों के लिए std :: tr1 :: हैश का विस्तार कैसे करें?
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
का उपयोग करके विशेषज्ञ लेकिन यह सुझाया गया तरीका है सकते हैं? इसके अलावा, क्या यह जीसीसी के कार्यान्वयन के साथ भी काम करता है? boost::hash
के लिए, यह एक नि: शुल्क फ़ंक्शन size_t hash_value (const MyType&)
प्रदान करने के लिए पर्याप्त है, क्या TR1 कार्यान्वयन के लिए कुछ समान है?
क्या निजी प्रतिलिपि बनाने वाले उपयोगकर्ता के परिभाषित प्रकारों के लिए std :: हैश का विस्तार करने का कोई तरीका है? इसके अलावा, क्या इसे ऑपरेटर() के साथ विस्तारित करने का कोई तरीका है जो वैल के बजाय कॉन्स्ट रेफ लेता है? –
टेम्पलेट विशेषज्ञता के साथ क्या समस्या है? आप अपनी ऑब्जेक्ट की प्रतिलिपि नहीं लेते हैं (आप संदर्भों से इसे पास करते हैं), इसलिए कोई समस्या नहीं - और ऑपरेटर() जो भी आप चाहते हैं, एक कॉन्स रेफ या वैल्यू लेता है। फिल नैश के जवाब को देखें, जो ऑब्जेक्ट को कॉन्स रेफरी के रूप में लेता है। – Anteru