मैंने हाल ही में this से पूछा कि डी में प्रकार कक्षाओं का अनुकरण कैसे करें और टेम्पलेट विशेषज्ञता का उपयोग करके ऐसा करने का एक तरीका सुझाया गया है।विभिन्न स्रोत फ़ाइल में डी टेम्पलेट विशेषज्ञता
मुझे पता चला कि डी एक अलग स्रोत फ़ाइल में टेम्पलेट विशेषज्ञता को पहचान नहीं पाया है। इसलिए मैं उस फ़ाइल में शामिल नहीं हो सकता था जिसमें फ़ाइल से शामिल नहीं है जहां जेनेरिक फ़ंक्शन परिभाषित किया गया है। उदाहरण के लिए, इस उदाहरण पर विचार करें:
//template.d
import std.stdio;
template Generic(A) {
void sayHello() {
writefln("Generic");
}
}
void testTemplate(A)() {
Generic!A.sayHello();
}
//specialization.d
import std.stdio;
import Template;
template Generic(A:int) {
void sayHello() {
writefln("only for ints");
}
}
void main() {
testTemplate!int();
}
यह कोड "जेनेरिक" प्रिंट करता है जब मैं इसे चलाता हूं। इसलिए मैं पूछ रहा हूं कि कुछ अच्छा कामकाज है, ताकि एल्गोरिदम से अधिक विशिष्ट रूप का उपयोग किया जा सके।
टाइप क्लास के बारे में प्रश्न में इस्तेमाल किए गए वर्कअराउंड को टेम्पलेट विशेषज्ञता के साथ सभी फ़ाइलों को आयात करने के बाद सामान्य कार्यों को मिश्रित करना था, लेकिन यह कुछ हद तक बदसूरत और सीमित है।
मैंने सुना है कि सी ++ 1 एक्स में बाहरी टेम्पलेट्स होंगे, जो इसकी अनुमति देंगे। क्या डी में एक समान सुविधा है?
यह उन कारणों के लिए बड़े पैमाने पर अनुमति नहीं है जिनमें अवांछित फ़ंक्शन अपहरण से बचने के लिए उदाहरण शामिल है, उदाहरण के लिए यदि 'जेनेरिक' निजी होगा तो 'template.d' किसी भी अन्य टेम्पलेट को ओवरराइड नहीं करना चाहेंगे जो मनमानी सामान कर सकता है –
" उपनाम "लिखता है टेम्पलेट। जेनेरिक जेनेरिक "specialization.d में मदद करता है? यह फ़ंक्शन अपहरण को लागू करने का तरीका है http://d-programming-language.org/hijack.html –