मैं सी ++ और डेल्फी के बीच तुलना कर रहा था और मुझे कुछ मुश्किल लगता है।डेल्फी जेनेरिक नेस्टेड क्लासेस
यह बहुत ही आसान सी ++ कोड है:
template<typename T>
class C {
class D {
T x;
}
}
इस परिदृश्य में, हम उस वर्ग C
है यह भी एक टेम्पलेट वर्ग एक टेम्पलेट वर्ग (= सामान्य वर्ग) और नेस्टेड वर्ग D
है। यदि T
double
है, तो के अंदर x
double
है।
मैं यह नहीं कह सकते हैं:
template<typename T>
class C {
template<typename T>
class D {
T x;
}
}
एक त्रुटि है कि जब से मैं पहले से ही "अंदर" हूँ C
और एक अन्य T
एक संघर्ष किया जाएगा। त्रुटि को ठीक करने के लिए, मुझे U
जैसे एक अलग नाम का उपयोग करना चाहिए।
template<typename T>
class C {
template<typename U>
class D {
T x;
}
}
डेल्फी में, मैं यह लिख सकते हैं:
type
TClassC<T> = class
private
type
TClassD = class
private
x: T;
end;
end;
तो T
एक integer
है, अब x
के बाद से एक integer
है (से मैं क्या ऑनलाइन पढ़ने समझ लिया है) TClassD
integer
है। डेल्फी में यह भी कानूनी है:
type
TClassC<T> = class
private
type
TClassD<T> = class // <-- note the <T> repeated!!
private
x: T;
end;
end;
अब के बारे में क्या? यदि मैं T
को फिर से TClassD
में घोषित करने में सक्षम हूं, तो इसका मतलब है कि <T>
के बिना मेरे पास एक गैर-जेनेरिक TClassD
कक्षा होगी। क्या मैं सही हूँ?
यह जांचने के लिए आपके लिए आसान होना चाहिए, लेकिन मुझे उम्मीद है कि अगर यह कोड संकलित होता है, तो आंतरिक टी बाहरी व्यक्ति को छुपाता है। तो ऐसा लगता है कि आपने अपने आंतरिक प्रकार पैरामीटर के लिए एक अलग नाम इस्तेमाल किया था। 'TClassC 'और फिर' TClassD 'की तरह। –
दूसरे शब्दों में, मेरी उम्मीद यह है कि डेल्फी कोड बिल्कुल आपके सी ++ संस्करण के साथ व्यवहार नहीं करता है, जिसमें कोई क्लैशिंग पैरामीटर नाम नहीं है। लेकिन सी ++ भाषा आपको नाम संघर्ष से बचाती है। –
आपके पहले सी ++ उदाहरण में, 'डी' स्वयं टेम्पलेट क्लास नहीं है,' सी' से टेम्पलेट सिर्फ दायरे में है इसलिए 'डी' इसका उपयोग कर सकता है। आपके दूसरे सी ++ उदाहरण में, 'टी' नामक दो टेम्पलेट पैरामीटर होने पर वास्तव में एक नामकरण संघर्ष है, क्योंकि सी ++ एक ही दायरे में दोहराने वाले पहचानकर्ता पसंद नहीं करता है। डेल्फी जेनेरिक सी ++ टेम्पलेट्स के समान नहीं हैं (भले ही वे समान वाक्यविन्यास का उपयोग करते हैं), और डेल्फी सी ++ की तुलना में इस विशेष उदाहरण में थोड़ा अधिक लचीला है। –