मुझे पता है कि सी ++ का उपयोग कैसे करें - टेम्पलेट्स - एक विशेषज्ञ नहीं, आपको दिमाग। जावा जेनरिक (और उस मामले के लिए स्कैला) के साथ, मेरे पास diffuculties है। शायद, क्योंकि मैं अपने सी ++ ज्ञान को जावा दुनिया में अनुवाद करने का प्रयास करता हूं। मैंने कहीं और पढ़ा है, "वे एक जैसे नहीं हैं: जावा जेनरिक केवल सिंटैक्टिक चीनी बचत कास्ट हैं, सी ++ टेम्पलेट्स केवल एक गौरवशाली प्रीप्रोसेसर हैं" :-)जावा जेनरिक, समर्थन "विशेषज्ञता"? सी ++ टेम्पलेट्स के लिए अवधारणात्मक समानताएं?
मुझे पूरा यकीन है कि दोनों थोड़ा सा सरल है। तो, बड़े और सूक्ष्म अंतर को समझने के लिए, मैं विशेषज्ञता साथ प्रारंभ करने का प्रयास:
में सी ++ मैं डिज़ाइन कर सकते हैं एक खाका (समारोह की कक्षा) कि पर किसी भी प्रकार T
कि समर्थन में कार्य करता है मेरी आवश्यक कार्रवाई:
template<typename T>
T plus(T a, T b) { return a.add(b); }
यह अब संभवतः किसी भी प्रकार के plus()
आपरेशन कहते हैं कि यह कर सकते हैं add()
[Note1] [1]
इस प्रकार, यदि T
add(T)
मेरा टेम्पलेट वोल काम का समर्थन करता है। यदि ऐसा नहीं होता है, संकलक तब तक शिकायत नहीं करेगा जब तक कि मैं plus()
का उपयोग नहीं करता। अजगर में हम इस "बतख टाइपिंग" फोन:। * यह एक बतख की तरह कार्य करता है, एक बतख की तरह नीम हकीमों, यह एक बतख है * (बेशक, type_traits का उपयोग कर के साथ इस संशोधित किया गया है एक सा, लेकिन जब तक हमारे पास कोई अवधारणा नहीं है, तो यह है कि सी ++ टेम्पलेट्स कैसे काम करते हैं, है ना?)
मुझे लगता है कि जावा में जेनिक्स भी काम करता है, है ना? सामान्य प्रकार I डिवाइस का उपयोग "टेम्पलेट" के रूप में किया जाता है, जिसे मैं वहां रखने की कोशिश करता हूं, ठीक है? जहां तक मैं समझता हूं कि मैं कुछ तर्कों पर बाधा डाल सकता हूं: यदि मैं अपने टेम्पलेट में add
का उपयोग करना चाहता हूं, तो मुझे implement Addable
पर तर्क तर्क घोषित करना होगा। सही बात? तो, कोई "बतख टाइपिंग" (बेहतर या बदतर के लिए)।
अब, में सी ++ मैं लिए चुन सकते हैं एक प्रकार पर विशेषज्ञ है कि कोई add()
:
template<>
T plus<MyX>(MyX a, MyX b) { return a + b; }
और अगर अन्य सभी प्रकार अभी भी "डिफ़ॉल्ट" कार्यान्वयन का उपयोग कर सकते हैं, अब मैंने MyX
के लिए एक विशेष जोड़ा - बिना रनटाइम ओवरहेड के।
क्या कोई जावा जेनरिक तंत्र का एक ही उद्देश्य है? बेशक, प्रोग्रामिंग में सब कुछ करने योग्य है, लेकिन मेरा मतलब है अवधारणा, बिना किसी चाल और जादू के?
प्रकार मिटाई गई विधि 'जोड़ योग्य राशि (पहले जोड़ा जा सकता है, जोड़ने योग्य दूसरा) ' – irreputable
@irreputable: धन्यवाद, आप सही हैं। मैंने इसे बदल दिया –
'योग' के लिए जेनेरिक काम कैसे करता है, इसकी महान व्याख्या। अब मैं इसे अपने पुराने जावा ज्ञान में अनुवाद कर सकता हूं। लेकिन यहां क्या exaclty * मिटा दिया गया है *? "टाइप एरर" नाम का क्या अर्थ है? – towi