मैं एक कन्स्ट्रक्टर बना रहा हूं जो इनपुट इटरेटर्स की एक जोड़ी लेगा।मुझे टेम्पलेट फ़ंक्शन हस्ताक्षर में const_iterator semantics की आवश्यकता कैसे हो सकती है?
DataObject::DataObject(const char *begin, const char *end)
हालांकि, मैं इस के किसी भी उदाहरण नहीं मिल सकता है: मैं विधि हस्ताक्षर संकलन समय const
अर्थ विज्ञान के समान करना चाहते हैं।
template<class InputIterator>
vector::vector(InputIterator first, InputIterator last)
{
construct(first, last, iterator_category(first));
}
जो कोई संकलन समय const
गारंटी देता है: उदाहरण के लिए, vector
के लिए मेरे एसटीएल कार्यान्वयन की सीमा निर्माता के रूप में परिभाषित किया गया है। iterator_category
/iterator_traits<>
में const
से संबंधित कुछ भी नहीं है।
क्या कॉलर की गारंटी देने का संकेत देने का कोई तरीका है कि मैं इनपुट डेटा को संशोधित नहीं कर सकता?
संपादित करें, 2010-02-03 16:35 यूटीसी
कैसे मैं समारोह का उपयोग करना चाहते का एक उदाहरण के रूप में, मैं, char*
संकेत की एक जोड़ी गुजरती हैं और पता करने के लिए सक्षम होने के लिए चाहते हैं फ़ंक्शन हस्ताक्षर के आधार पर, जो डेटा वे इंगित करते हैं उन्हें संशोधित नहीं किया जाएगा।
मुझे आशा थी कि मैं const12iterator semantics की गारंटी के लिए const char*
पॉइंटर्स की एक जोड़ी बनाने से बच सकता हूं। मुझे इस मामले में टेम्पलेट कर का भुगतान करने के लिए मजबूर होना पड़ सकता है।
क्या यह ऐसी चीज है जो संकलक-लागू अवधारणाओं के लिए अच्छा होगा? मुझे याद नहीं है कि प्रस्ताव ने कॉन्स आवश्यकताओं के बारे में कुछ भी कहा था। – mskfisher
मुझे लगता है कि इस बिंदु पर सबसे अच्छा संभव विकल्प स्पष्ट रूप से 'कॉन्स्ट char *' का उपयोग करके फ़ंक्शन को तुरंत चालू करना है और अन्य सभी प्रकारों के लिए मेरे संकलन-समय की जांच के रूप में उस पर भरोसा करना है। – mskfisher