सी ++ एसटीएल पूरी तरह से सार आधार वर्ग (उर्फ इंटरफेस) का उपयोग अक्सर प्रतीत नहीं होता है। मुझे पता है कि अधिकांश चीजें एसटीएल एल्गोरिदम या चालाक टेम्पलेट मेटाप्रोग्रामिंग के साथ हासिल की जा सकती हैं।एसटीएल में कोई "इटेबल" इंटरफ़ेस क्यों नहीं है?
लेकिन फिर भी, कुछ उपयोग मामलों के लिए (उदाहरण के लिए, एक एपीआई में, अगर मैं कंटेनर के प्रकार के बारे में विशिष्ट नहीं होना चाहता हूं, तो बस इसमें शामिल तत्वों के बारे में), निम्न रूप का एक इंटरफ़ेस होगा अच्छा: एसटीएल कंटेनर गैर आभासी समारोह के रूप में इस वर्ग को लागू
template<typename T> struct forward_iterable {
struct iterator {
typedef T value_type;
typedef T& reference;
typedef T* pointer;
virtual reference operator*() const = 0;
virtual pointer operator->() const = 0;
virtual bool operator==(const iterator&) const = 0;
virtual bool operator!=(const iterator&) const = 0;
virtual operator const_iterator() const = 0;
virtual iterator& operator++() = 0;
virtual iterator operator++(int) = 0;
};
struct const_iterator { ... }; // similar, but with const references
virtual iterator begin() = 0;
virtual const_iterator begin() const = 0;
virtual iterator end() = 0;
virtual const_iterator end() const = 0;
};
हैं, तो यह, मेरी राय में, प्रदर्शन को प्रभावित नहीं होगा (अगर मैं इस इंटरफेस के माध्यम से सीधे और नहीं कंटेनर का उपयोग)। तो एसटीएल में इतने कम "इंटरफेस" क्यों हैं? या मैं बस "जावा" शब्दों में बहुत ज्यादा सोच रहा हूँ?
हम्म, मैंने बस एक जटिलता के बारे में सोचा: तुलना ऑपरेटर की सामान्य प्रकृति के कारण गतिशील प्रकार की जांच की आवश्यकता होगी ताकि यह सुनिश्चित किया जा सके कि इटरेटर "संगत" हैं। क्या यही कारण है कि यह काम नहीं करता है? – summentier