सारांश
यहाँ संक्षिप्त उत्तर है:
- typedefs वास्तव में संकलन समय कोड जनरेटर द्वारा इस्तेमाल किया एक चर रहे हैं।
- सी # कोड जनरेशन भाषा संरचनाओं को जोड़ने से बचने के लिए डिज़ाइन किया जा रहा है।
इसलिए, टाइपपीफ की अवधारणा सी # भाषा के साथ अच्छी तरह से फिट नहीं होती है। सी ++ एक precompiler कि सी कोड है, जो तब संकलित किया गया था थूक से बाहर के रूप में शुरू कर दिया:
लांग उत्तर
सी ++ में, यह अधिक समझ में आता है। यह "कोड जनरेटर" अभी भी आधुनिक सी ++ सुविधाओं में प्रभाव डालता है (यानी, टेम्पलेट अनिवार्य रूप से संकलन समय पर कक्षाओं और कार्यों को उत्पन्न करने के लिए एक ट्यूरिंग-पूर्ण भाषा है)। इस संदर्भ में, एक टाइपिफ़ाफ़ समझ में आता है क्योंकि यह एक संकलन-समय प्रकार फैक्ट्री या "एल्गोरिदम" का "परिणाम" प्राप्त करने का एक तरीका है जो एक प्रकार "रिटर्न" देता है।
इस अजीब मेटा-भाषा (जो बूस्ट के बाहर कुछ महारत हासिल कर चुके हैं) में, एक टाइपिफ़ वास्तव में एक चर है।
जो आप वर्णन कर रहे हैं वह कम जटिल है, लेकिन आप अभी भी टाइपेडफ को चर के रूप में उपयोग करने का प्रयास कर रहे हैं। इस मामले में, यह एक इनपुट चर के रूप में प्रयोग किया जाता है। तो जब अन्य कोड टाइपपीफ का उपयोग करता है, तो यह वास्तव में उस प्रकार का सीधे उपयोग नहीं कर रहा है। इसके बजाय, यह टाइप किए गए इनपुट चर के आधार पर कक्षाओं और विधियों का निर्माण, संकलन-समय कोड जेनरेटर के रूप में कार्य कर रहा है। यहां तक कि यदि आप सी ++ टेम्पलेट्स को अनदेखा करते हैं और सी सी टाइपिफ्स को देखते हैं, तो प्रभाव वही है।
सी ++ और उत्पादक प्रोग्रामिंग
सी ++ एक बहु paradign भाषा होने के लिए डिजाइन किया गया था (OO और प्रक्रियात्मक, लेकिन बूस्ट तक कार्यात्मक नहीं बाहर आया था)। दिलचस्प बात यह है कि टेम्पलेट्स ने एक अप्रत्याशित पैराडाइन विकसित किया है: जेनरेटिव प्रोग्रामिंग। (जेनरेटिव प्रोग्रामिंग सी ++ से पहले थी, लेकिन सी ++ ने इसे लोकप्रिय बना दिया)। जेनरेटिव प्रोग्राम वास्तव में मेटा-प्रोग्राम होते हैं - जब संकलित होते हैं - आवश्यक कक्षाएं और विधियां उत्पन्न करते हैं, जो बदले में निष्पादन योग्य में संकलित होते हैं।
सी # और उत्पादक प्रोग्रामिंग
हमारे उपकरण धीरे-धीरे एक ही दिशा में विकसित हो रहे। बेशक, प्रतिबिंब उत्सर्जन का उपयोग "मैनुअल" जेनरेटिव प्रोग्रामिंग के लिए किया जा सकता है, लेकिन यह काफी दर्दनाक है। जिस तरह LINQ प्रदाता अभिव्यक्ति पेड़ का उपयोग करते हैं वह प्रकृति में बहुत ही रचनात्मक है। टी 4 टेम्पलेट्स वास्तव में करीब आते हैं लेकिन फिर भी कम हो जाते हैं। "एक सेवा के रूप में कंपाइलर" जो उम्मीदपूर्वक सी # vNext का हिस्सा होगा, सभी का सबसे अधिक आशाजनक प्रतीत होता है, अगर इसे किसी प्रकार के प्रकार परिवर्तनीय (जैसे टाइपिफ़) के साथ जोड़ा जा सकता है।
पहेली का यह एक टुकड़ा still missing है: उत्पादक कार्यक्रमों स्वचालित ट्रिगर तंत्र के कुछ प्रकार की जरूरत है (सी ++ में, इस अंतर्निहित टेम्पलेट इन्स्टेन्शियशन द्वारा नियंत्रित किया जाता है)।
हालांकि, यह स्पष्ट रूप से नहीं सी # का लक्ष्य सी ++ टेम्पलेट्स की तरह सी # भाषा में "कोड जनरेटर" के किसी भी प्रकार है (शायद understandability की खातिर; बहुत कुछ सी ++ प्रोग्रामर सी ++ टेम्पलेट्स समझते हैं)। यह शायद सी # के बजाय टी 4 द्वारा संतुष्ट हो जाएगा।
निष्कर्ष (सारांश दोहरा)
ऊपर की
सभी यह कहना है:
- typedefs कोड जनरेटर द्वारा इस्तेमाल किया एक चर रहे हैं।
- सी # कोड जनरेशन भाषा संरचनाओं को जोड़ने से बचने के लिए डिज़ाइन किया जा रहा है।
इसलिए, टाइपपीफ की अवधारणा सी # भाषा के साथ अच्छी तरह से फिट नहीं होती है।
आप अंतर्निर्मित प्रकारों से क्यों नहीं प्राप्त कर सकते हैं? – arootbeer
मैं सिर्फ उत्सुक हूँ? कोई स्थिति या कारण क्या होगा जो कोई ऐसा करना चाहेगा? क्षमा करें अगर यह अजीब लगता है, तो मैं सिर्फ अनजान हूं कि आप int का उपयोग क्यों नहीं करना चाहते हैं। ऐसा लगता है कि यह आपके कोड को पढ़ने के लिए किसी अन्य डेवलपर के लिए भ्रमित होगा। –
सहमत हैं, इसे पढ़ने में रुचि रखते हैं, लेकिन यह खराब अभ्यास होना चाहिए –