/ / "कंटेनर" के साथ अपने सबक्लास के दायरे में मानक कंटेनर सदस्य विधियों को लाएं ऑपरेटरों के लिए काम नहीं करता है - सी ++, विरासत, एसटीएल, उपयोग

"कंटेनर" सिंटैक्स के साथ अपने उप-वर्ग के दायरे में मानक कंटेनर सदस्य विधियों को लाएं ऑपरेटरों के लिए काम नहीं करता है - सी ++, विरासत, एसटीएल, उपयोग

कुछ आवश्यक कारणों से, मैंने कुछ मानक कंटेनरों को उपclassed है std::vector साथ में private विरासत।

template<typename T>
struct MyVector : private std::vector<T>
{
typedef std::vector<T> vector;

using vector::begin;  // ok
using vector::end;  // ok
using vector::size;  // ok
using vector::operator ==;  // <---- error

// Other customized methods
};

ज्यादातर बार, using सिंटैक्स का उपयोग उन विधियों को उप-वर्ग के दायरे में लाने के लिए किया जाता है।
स्पष्ट ओवरलोड किया जाता है, केवल तभी मैं कुछ अतिरिक्त करना चाहता हूं।

सब कुछ ठीक काम कर रहा है std::vector::operator == दायरे में नहीं आ रहा है और संकलक त्रुटि देता है:

त्रुटि: कोई सदस्य मेल नहीं खाता है MyVector<int>::vector {उर्फ std::vector<int, std::allocator<int> >}::operator== में MyVector<int>::vector {aka class std::vector<int, std::allocator<int>

मैंने कस्टम कक्षाओं और इसके साथ स्थिति को अनुकरण करने की कोशिश की ठीक संकलित करता है.
मानक कंटेनर के साथ, संकलन विफल रहता है.

के स्रोत ब्राउज़ करने से std::vector, मुझे देखने के लिए मिलता है operator == कक्षा के शरीर के अंदर मौजूद है।
लाने के लिए सही वाक्यविन्यास क्या है operator == के दायरे में MyVector?

उत्तर:

उत्तर № 1 के लिए 1

मानक कंटेनर में अधिकांश ऑपरेटर अधिभार गैर-सदस्य होते हैं ताकि आप उन्हें ढूंढ सकें।

मैं ध्यान दूंगा कि यह (जो मैंने मानक में पढ़ा है) से यह मामला नहीं होना चाहिए। हालांकि ऐसा लगता है कि सबसे आम कार्यान्वयन ऐसा करेंगे। अगर आप इसका उपयोग करना चाहते हैं std::vector"रों operator== आप इसे अधिभारित कर सकते हैं जैसे कि आप जो भी लाया है उसके साथ मानक में परिभाषित किया गया है, ऐसा कर सकते हैं:

bool operator == (const MyVector &other) const
{
const std::vector &this_ = *this, &other_ = other;
return this_ == other_;
}