2013-02-20 14 views
5

हमारे आवेदन में सामान्य रूप से उपयोग की जाने वाली कक्षाएं (उदाहरण के लिए एक प्रोजेक्ट कॉन्फ़िगरेशन पैरामीटर रखती है) जैसी है।सभी परियोजनाओं से एक सामान्य उपयोग वर्ग तक पहुंच

class DB{ 
public: 
int projectVersion 
int somethingSoMuchImportantAllOverTheProject 
}; 
extern DB* pDB; 

क्योंकि अन्य सभी वर्ग इस कक्षा का उपयोग करेंगे, उन सभी को किसी भी तरह इसका उपयोग करने की आवश्यकता है। हमारा समाधान "बाहरी डीबी * पीडीबी डालने वाला है;" इसकी हेडर फ़ाइल के तहत, जिसे भी इसकी आवश्यकता है, हेडर को शामिल करने के बाद इसे एक्सेस करने में सक्षम हो जाएगा। मैं सोच रहा हूं कि शायद एक बेहतर समाधान है और इस सामान्य मामले के लिए अपने विचार प्राप्त करना चाहते हैं।

+1

क्या यह एक सूचक होने के लिए _have_ है? –

+4

मैंने 'सी' टैग हटा दिया, यह स्पष्ट रूप से सी ++ है। – unwind

+1

आप किस बारे में बात कर रहे हैं वह एक साधारण वैश्विक चर है (दूसरे पर एक रूप में)। तो, एक बेहतर विकल्प का सुझाव देने के लिए, पूरी तस्वीर को देखने की आवश्यकता है क्योंकि यह एक डिजाइन विचार है, सिंटैक्स नहीं। – KBart

उत्तर

1

यह एक सिंगलटन है। आप इस पर बहुत सी चर्चाएं पा सकते हैं, लेकिन एक महत्वपूर्ण बात यह है कि कक्षा के निर्माता को छुपाएं ताकि कक्षा के उपयोगकर्ताओं को एक वस्तु का उपयोग करने के लिए मजबूर किया जा सके।

+0

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

+0

मुझे यकीन नहीं है कि आपका मतलब "लिंक" से क्या है ... मुझे लगता है कि आप बिल्ड प्रक्रिया के लिंक हिस्से का मतलब नहीं है। इसे सीधे अपने कोड में "उपयोग करें", उदा। 'पीडीबी-> प्रोजेक्ट वर्जन' के माध्यम से संस्करण की जांच करें। – mark

+0

मैंने इस कारण का उल्लेख किया क्योंकि मुझे पता है कि सिंगलटन ऑब्जेक्ट को एकल बनाने के बारे में है, केवल इसका एक उदाहरण देता है। लेकिन मुझे यकीन नहीं है कि "बाहरी डीबी * पीडीबी" जैसे ऑब्जेक्ट पॉइंटर को हेडर पर डालना; उदाहरण में –

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