2012-06-11 10 views
19

जिज्ञासा से बाहर ..क्या फ़ंक्शन के अंदर एक संरचना को परिभाषित करने के लिए कोई "दंड" है?

शीर्षक कहता है: क्या फ़ंक्शन के अंदर एक संरचना को परिभाषित करने के लिए कोई "दंड" है? (जैसे प्रदर्शन, स्मृति, बुरा प्रोग्रामिंग अभ्यास, आदि)


पी.एस. मुझे पता है, यह फ़ंक्शन के अंदर (गैर-टेम्पलेट) फ़ैक्टर को परिभाषित करने का एक सामान्य अभ्यास है, लेकिन फिर भी ..)

+1

एकमात्र "जुर्माना" मैं सोच सकता हूं, यह है कि इसके संरचना के उदाहरणों को समारोह के बाहर से संदर्भित नहीं किया जा सकता है। –

+1

@ जोचिमपिलबोर्ग - ज़ाहिर है, मुझे यह दिमाग में है। स्थिति के आधार पर यह एक लाभ हो सकता है, न कि "जुर्माना"। –

+3

एलओएल, के लिए नीचे वोट? –

उत्तर

17

सी ++ 11 में, नहीं - कोई दंड नहीं है। मैं इसे कार्यान्वित विवरण के साथ किसी भी "अधिक दृश्यमान" क्षेत्रों को प्रदूषित न करने के लिए एक बहुत अच्छी शैली भी मानूंगा, बेशक, आप उस मज़ेदार को कहीं और फिर से उपयोग करना चाहते हैं। हालांकि, lambdas अनिवार्य रूप से इस विचार का एक संघनित रूप है, और आमतौर पर को प्राथमिकता दी जानी चाहिए यदि आप केवल फंक्चर के रूप में संरचना का उपयोग कर रहे हैं। सभी प्रकार के डेटा के लिए, यह बिल्कुल ठीक है, हालांकि यह आमतौर पर उस पहलू में std::pair और std::tuple के साथ प्रतिस्पर्धा करता है।

सी ++ 03 में, आप टेम्पलेट पैरामीटर के रूप में ऐसी संरचना का उपयोग नहीं कर सकते हैं, क्योंकि उन पैरामीटरों को बाहरी संबंध होना चाहिए (विजुअल स्टूडियो आपको वैसे भी करने देता है)। यह अभी भी एक पॉलिमॉर्फिक इंटरफ़ेस के साथ ऐसी संरचना का उपयोग करने के लिए उपयोगी हो सकता है।

+0

क्या इसका मतलब यह है कि सी ++ 11 में, टेम्पलेट पैरामीटर की अनुमति है? –

+0

हां, उन्हें अनुमति है। – ltjax

+0

अच्छा :) जानना अच्छा है, धन्यवाद! –

4

चूंकि यह पूरी तरह से एक दृश्यता समस्या है, इसलिए मैं एक व्यावहारिक परिदृश्य की कल्पना नहीं कर सकता जहां प्रदर्शन होगा या स्मृति जुर्माना

+0

मुझे लगता है कि लेखक "खराब शैली" लिखते समय सामान्य रूप से "खराब प्रोग्रामिंग प्रथाओं" का जिक्र कर रहे थे ... शायद :) – penelope

+0

@penelope - true। संपादित।धन्यवाद :) –

0

यदि आप सी ++ 03 का उपयोग कर रहे हैं, तो तकनीकी रूप से आप एक स्थानीय रूप से परिभाषित संरचना का उपयोग टेम्पलेट तर्क के रूप में नहीं कर सकते हैं लेकिन कुछ कंपाइलर्स (अर्थात् एमएसवीसी) इसे अनुमति देते हैं।

0

मुझे पता है कि आपने प्रदर्शन के बारे में पूछा था, लेकिन मैं एक और मुद्दे के बारे में सोच रहा था। क्या आप सी और सी ++ या सिर्फ उन भाषाओं में से एक के लिए पूछ रहे हैं? मैं एक जंगली अनुमान लगा रहा हूं कि आप किसी कार्य में ढांचे के ढांचे या ढांचे के ढांचे के लिए एक संरचना को परिभाषित करना चाहते हैं।

सी के लिए, आप एक अलग मॉड्यूल में संरचनाओं को परिभाषित और घोषित करके और उन्हें स्थिर बनाकर छिपाने की चीजों से संपर्क कर सकते हैं। फिर, आप एक्सेस फ़ंक्शंस प्रदान कर सकते हैं, जितना आप सी ++ वर्ग के सदस्यों के लिए करेंगे। आप उन मॉड्यूल के लिए .h फ़ाइल में फ़ंक्शन घोषणाएं शामिल करेंगे जिन्हें संरचनाओं तक पहुंचने के लिए आवश्यक है।

यदि यह सी ++ के लिए है, तो एक वर्ग बनाना और संरचना को निजी या संरक्षित करना आपके लेखन के साथ उपयुक्त हो/सेट/हेरफेर विधियों बाकी की देखभाल करता है।

यदि आपने अपनी मूल पोस्ट संपादित की और विस्तार किया कि आप यह क्यों पूछ रहे हैं, तो आपने एक अच्छा सवाल पूछा है।

+0

मैं सी और सी ++ दोनों के लिए पूछ रहा हूं, जैसा कि मैंने कहा था, यह जिज्ञासा से बाहर है, क्योंकि मैंने इन दिनों कई बार (फ़ंक्शन के अंदर संरचना) की है। मुझे कुछ विकल्प देने के लिए धन्यवाद, मैं उनके बारे में जानता हूं और मैं बस इस सटीक मामले के बारे में सोच रहा था - क्या मुझे ऐसी चीजों से बचना चाहिए या नहीं। वैसे भी धन्यवाद :) –