टीएल; डॉ: आप डी में perfect forwarding कैसे करते हैं?डी में बिल्कुल सही अग्रेषण?
लिंक एक महान व्याख्या है, लेकिन उदाहरण के लिए, मान लीजिए कि मैं इस विधि का उपयोग करते हैं:
void foo(T)(in int a, out int b, ref int c, scope int delegate(ref const(T)) d)
const nothrow
{
}
मैं एक और तरीका कैसे बना सकता हूँ, bar()
, जो foo()
के एवज में कहा जा सकता है, जो बाद में foo()
"पूरी तरह से" (यानी कॉलिंग साइट पर संकलन/स्कोप/आदि समस्याओं को पेश किए बिना) कहता है?
अनुभवहीन दृष्टिकोण
auto bar(T...)(T args)
{
writeln("foo() intercepted!");
return foo(args);
}
निश्चित रूप से
काम नहीं करता है, क्योंकि यह ref
, in
, out
, inout
, विधि के const
-नेस, pure
अल्पसंख्यक, nothrow
, आदि से हैंडल नहीं करता ... और यह भी सीमित करता है कि आर-मानों के साथ मूल्यों का उपयोग कैसे किया जा सकता है।
और मुझे नहीं पता कि उन संभावित मामलों को कैसे संभालना है ... कोई विचार?
रुको, 'नोट्रो', 'शुद्ध', 'कॉन्स्ट',' इनआउट ', '@ प्रॉपर्टी', '@ सुरक्षित', और उन सभी अन्य चीजों के बारे में क्या है जो मैं इस समय नहीं सोच सकता? उनमें से प्रत्येक (यहां तक कि '@ संपत्ति') कोड व्यवहार को थोड़ा बदल सकता है, और/या संकलन को रोक सकता है। – Mehrdad
आपको वापसी के रूप में एक ऑटो रेफरी चाहिए, और यदि आपके टेम्पलेट पर विचार है, और फिर भी, मुझे यकीन नहीं है कि यह पर्याप्त है। – deadalnix
@ मेहरदाद: अच्छे अंक, हालांकि शुद्ध आजकल टेम्पलेट्स के लिए अनुमानित है। – dsimcha