आपका कोड संकलन त्रुटि उत्पन्न करता है क्योंकि संकलक को यह जानने का कोई तरीका नहीं है कि T
में Add
नामक एक विधि है जो एक एकल स्ट्रिंग पैरामीटर प्राप्त करता है।
मैंने सोचा कि डेल्फी में जेनेरिक प्रकार सामान्य जेनेरिक फ़ंक्शन में डाले गए थे, इसलिए यह केवल उस त्रुटि के साथ उपयोग किया जाएगा जब कोई ऐड (स्ट्रिंग) विधि नहीं है।
यदि आप स्मॉलटॉक या सी ++ टेम्पलेट्स का उपयोग कर रहे थे, तो आपकी धारणा सटीक होगी। हालांकि, जेनेरिक टेम्पलेट्स के समान नहीं हैं। जेनेरिक के लिए आपको टाइप पैरामीटर में बाधा लागू करने की आवश्यकता है। बाधा को संकलक को बताने की ज़रूरत है कि T
के गुण क्या हैं।
उदाहरण के लिए, आप को उस वर्ग से प्राप्त करने के लिए बाध्य कर सकते हैं जिसमें उपयुक्त Add
विधि है। या उपयुक्त Add
विधि के साथ इंटरफ़ेस को लागू करने के लिए आप T
को बाधित कर सकते हैं। डेल्फी सामान्य बाधाओं के लिए
प्रलेखन लिंक: http://docwiki.embarcadero.com/RADStudio/en/Constraints_in_Generics
सामान्य बाधाओं कि लागू किया जा सकता बल्कि सीमित हैं, जो एक शर्म की बात है। उदाहरण के लिए, मैं कुछ गणितीय ऑपरेटरों के लिए एक प्रकार को बाधित करने में सक्षम होना पसंद करूंगा। उदाहरण के लिए, मैं +
और -
ऑपरेटरों के पास एक प्रकार को बाध्य करने में सक्षम होना चाहता हूं। हालांकि, जेनेरिक और टेम्पलेट दोनों के लिए पेशेवर और विपक्ष हैं, और इसलिए मैं स्वीकार करता हूं कि ये सीमाएं डेल्फी भाषा डिजाइनरों द्वारा न्यायसंगत डिजाइन निर्णय का परिणाम हैं।
स्रोत
2013-08-26 14:29:20
कारण मैं उपर्युक्त करना चाहता हूं कि मेरे पास दो वर्ग हैं जो बेस क्लास (या इंटरफ़ेस) साझा नहीं करते हैं लेकिन कुछ विधि हस्ताक्षर बिल्कुल समान हैं। मुझे लगता है कि सीमित बाधाओं के साथ यह संभव नहीं है? – monoceres
यह सही है। यदि ये टेम्पलेट थे तो आप ठीक होंगे। लेकिन आप जेनेरिक के साथ बस भाग्य से बाहर हैं। आपने एक ही समस्या को मारा है जो मुझे अच्छे गणितीय एल्गोरिदम लिखने से रोकता है जो स्केलर और जटिल मूल्यों दोनों पर काम कर सकता है। –
यह बहुत बुरा है :(मुझे लगता है कि मुझे आरटीटीआई और if-statement (blersh) पर वापस जाना होगा। – monoceres