अतः, मेरे पास एक सरल कामकाजी कोड था, उदाहरण के लिए
टेम्पलेट & lt; typename T , टाइपअनाम VALUE & gt; VALUE नक्शाएट (टी कुंजी) {std :: map & lt; T, VALUE & gt; :: const_iterator item_i (MyMap.find (कुंजी)), end_i (MyMap.end ()); If (item_i == end_i) {std :: exception को छोड़ें ("ऐसी कोई कुंजी नहीं!"); } वापसी (* item_i) .second; } प्रश्न : क्या std :: map का उपयोग किए बिना एक नया टेम्पलेट फ़ंक्शन बनाना संभव है , लेकिन विभिन्न कंटेनरों (पूर्व std :: map , std :: multimap , ...) की तरह, कुछ ऐसा: टेम्पलेट & lt; वर्ग कंटेनर, टाइपनाम टी, टाइपनामनाम VALUE & gt; VALUE मानचित्र (कंटेनर और माइमप, टी कुंजी) {कंटेनर & lt; T, VALUE & gt; :: const_iterator item_i (MyMap.find (कुंजी)), end_i (MyMap.end ()); / * ... * /} समस्या : जब मैं इसे इस्तेमाल करने के लिए ट्रिंग कर रहा हूं, जैसे: std :: नक्शा & lt; int, char & gt; my_map; Char ch = mapAt & lt; std :: map & lt; int, char & gt; (), int, char & gt; (my_map, 123); // c2664 त्रुटि संकलक मुझे एक त्रुटि बचाता है:
main.cpp (119): त्रुटि C2664: 'mapAt': पैरामीटर 1 को कनवर्ट नहीं कर सकता से 'std :: नक्शा & LT; _Kty, _Ty & gt;' 'Std :: map & lt; _Kty, Ty & gt; ( _cdecl & amp;) '1 & gt; 1 के साथ & gt; [1 & gt;
_Kty = int, 1 & gt; _Ty = चार 1 & gt; ] 1 & gt; कोई भी उपयोगकर्ता परिभाषित-रूपांतरण ऑपरेटर उपलब्ध नहीं है जो इस रूपांतरण को पूरा कर सकता है या ऑपरेटर को
नहीं कहा जा सकता है। आप इस तरह कुछ लिख सकते हैं:
टेम्पलेट & lt; वर्ग कंटेनर & gt; Typename कंटेनर :: मैप_प्रकार नक्शाएट (कंटेनर और माईमाप, टाइपनाम कम कंटेनर :: कुंजी प्रकार और कुंजी) {typename कंटेनर :: const_iterator iter = MyMap.find (कुंजी); वापसी-> दूसरा; } Int main () {std :: map & lt; int, char & gt; my_map; Char ch = mapAt (my_map, 123); }
Comments
Post a Comment