2012-11-11 5 views
9

एक अजीब समस्या के लिए "रचनात्मक" (यानी विचित्र) समाधानों पर विचार करते समय, एक विशेष विचार ने मेरी जिज्ञासा को जन्म दिया। यह एक ऐसा विचार नहीं है जिसका उपयोग करने की संभावना है, लेकिन मैं अभी भी जानना चाहूंगा कि यह मानक के अनुसार कानूनी है या नहीं।क्या सदस्य वर्ग अपने माता-पिता से प्राप्त कर सकता है?

एक साधारण उदाहरण होगा ...

class base_t 
{ 
    private: 
    // stuff 

    public: 
    // more stuff 

    class derived_t : public base_t // <--- weirdness here 
    { 
     // ... 
    };  
}; 

weirdness के भाग - base_t जो derived_t शामिल से derived_t inherits के बाद से, ऐसा लगता है derived_t की तरह ही होता है।

तो क्या यह curiously recurring template pattern पर समान प्रकार की वैध-लेकिन-अजीब और डरावनी चीज़ है, या यह अवैध है?

EDIT - मुझे शायद यह उल्लेख करना चाहिए कि जिस कारण से मैंने सोचा था कि कुछ नामस्थान प्रदूषण से बचने की कोशिश कर रहा था। एक सदस्य के रूप में एक वर्ग होने से एक और वैश्विक वर्ग शुरू करने से बचा जाता है, लेकिन उस दूसरे वर्ग को पहले से बहुत कुछ साझा करने की आवश्यकता होती है।

यदि यह कक्षाओं की केवल एक जोड़ी थी तो यह कोई मुद्दा नहीं होगा, लेकिन यह कोड जनरेटर के लिए है।

+1

बस इसके बारे में सोचें। एक बॉक्स के बारे में सोचें जिसमें स्वयं शामिल है ... –

+2

ओओपी परिप्रेक्ष्य से यह कम से कम बेकार है ... –

+0

@ ब्रूनो: जरूरी नहीं। –

उत्तर

9

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

class base_t 
{ 
    private: 
    // stuff 

    public: 
    // more stuff 

    class derived_t; 
}; 

class base_t::derived_t : public base_t 
{ 
    // ... 
};  
+0

अब मैं व्युत्पन्न वर्ग सीआरटीपी की पूर्णता के बारे में सोच रहा हूं। मेथिंक यहाँ कुछ सूक्ष्म है। –

+0

@ एएलएफ: ठीक है, वर्ग * दो चरण प्रक्रिया के कारण सदस्य कार्यों के भीतर पूर्ण है। शायद यह नेस्टेड प्रकार परिभाषाओं पर भी लागू होता है। सीआरटीपी के लिए, हालांकि, एक टेम्पलेट पैरामीटर पूरा नहीं होना चाहिए, और अपूर्ण वर्ग के आधार पर एक टेम्पलेट जरूरी नहीं है। –

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