2016-11-23 4 views
8

std::map में transparent (template <class K> at(K&& key);) गायब होने का कोई कारण है?क्यों कोई पारदर्शी सी ++ 1x std :: map :: पर?

+1

इसमें पारदर्शी 'ऑपरेटर [] 'या तो – Slava

+0

@ स्लावा नहीं है, लेकिन इसमें पारदर्शी' ढूंढ 'है। – StoryTeller

+1

मैं इसे नहीं चाहता। कुंजी एक विशिष्ट प्रकार है, और मैं एक टेम्पलेट फ़ंक्शन नहीं चाहता जो कुछ भी ले ले, केवल जब भी मैं तर्क को गलत टाइप करता हूं तो मुझे त्रुटियों की चादरें देने के लिए। – SergeyA

उत्तर

7

मेरा अनुमान है कि std::map::at()std::map::operator[]() का "सीमा-जांच" संस्करण होना चाहिए। std::map::operator[]() का पारदर्शी संस्करण प्रदान करने से std::map::key_type पर अतिरिक्त आवश्यकता लागू होती है और क्वेरी कुंजी प्रकार K - यदि क्वेरी कुंजी मानचित्र में नहीं है, तो इसे डाला जाना चाहिए (डिफ़ॉल्ट निर्मित मूल्य के साथ), जिसका अर्थ है कि std::map::key_type से रचनात्मक होना चाहिए क्वेरी कुंजी प्रकार।

+0

यकीन नहीं है कि मैं यह तर्क खरीदता हूं। यदि प्रकार परिवर्तनीय है, तो यह इससे रचनात्मक होने जैसा ही है। – SergeyA

+3

@ सर्गेय दो प्रकारों को परिवर्तनीय होने की आवश्यकता नहीं है - उन्हें केवल एक पारदर्शी तुलनित्र के माध्यम से तुलनीय होने की आवश्यकता है। – Leon

+4

यह वास्तव में सही है! मैं भविष्य में पाठकों के लिए अपनी टिप्पणी छोड़ दूंगा, लेकिन यह तार्किक रूप से वापस ले लिया गया है। – SergeyA

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