2010-10-31 8 views
6

एसटीएल allocators इस निर्माता प्रपत्र (20.1.5) की आवश्यकता होती है: आवश्यकता है कि Y(a) == b;एसटीएल संभाजक, अन्य प्रकार की प्रति निर्माता, rebind

मानक कार्यान्वयन यह संकेत मिलता है के साथ X a(b);, और के रूप में कार्यान्वित किया जाता है:

template<class U> allocator(const allocator<U> & o) throw() 

मुझे यह समझने में समस्या हो रही है कि यह आवश्यकता क्यों मौजूद है। मैं समझता हूं कि आवंटकों को स्थैतिक होना चाहिए (कोई राज्य नहीं है), लेकिन पृथ्वी पर क्यों आप उन्हें इस तरह परिवर्तित करने में सक्षम होना चाहिए?

उत्तर

6

अन्य आवंटकों से निर्माण की अनुमति देने के लिए, कंटेनरों को आपके द्वारा निर्दिष्ट किए गए एक अलग आवंटक प्रकार का उपयोग करने की आवश्यकता है। सूचियां और नक्शे, उदाहरण के लिए, वे उनके द्वारा प्रदर्शित मूल्य_ प्रकार के बजाय अपने आंतरिक नोड प्रकार आवंटित करते हैं।

कोड के समान दिखता है:

template<class T, class Alloc=std::allocator<T> > 
struct Container { 
    typedef T value_type; 
    typedef Alloc allocator_type; 

private: 
    struct Node {/*...*/}; 
    typedef typename Alloc::template rebind<Node>::other RealAllocatorType; 
    RealAllocatorType allocator; 
}; 
+1

केवल कंटेनरों कि सभी वस्तुओं समीप की दुकान (वेक्टर, स्ट्रिंग) सीधे दिया संभाजक प्रकार का उपयोग कर सकते हैं। –

+1

धन्यवाद। यह वास्तव में एक क्रूर आवश्यकता है। मैं यहां स्कॉट मेयर से सहमत होना शुरू कर रहा हूं, आवंटक प्रणाली मूल रूप से कचरा प्रतीत होता है। –

+0

@ एडीए: शहर पर इतनी सारी रात की तरह, यह 15 साल पहले समझ में आया। मैं आज सहमत हूं। :) –

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