के लिए एक प्रकार nullptr दें निम्नलिखित स्निपेट मान लीजिए:,टेम्पलेट कटौती
template <class T>
void fct(T* a, T* b){
// do something
}
A a;
fct(&a, nullptr); // Problem here!
इस मुसीबत बना देता है के बाद से कॉल तर्क प्रकार A*
और nullptr_t
और इतने संकलक के हैं टेम्पलेट पैरामीटर T
अनुमान नहीं कर सकते।
आम तौर पर, मैं कई विचारों की कल्पना कैसे हल करने के लिए इस कर सकते हैं:
- परिभाषित
A* b = nullptr
और प्रयोगnullptr
मामले - के लिए
fct(&a, b)
fct
के लिए एक तर्क के साथ एक अधिभार को परिभाषित करें उपयोगfct(&a, static_cast<A*>(nullptr))
या क्या कोई और साफ समाधान है, li एक "टाइप नलप्टर" की तरह कुछ बनाने के लिए?
template <class T, class U>
void fct(T* a, U b){
T* b2 = b;
// do something
}
A a;
fct(&a, nullptr);
यह fct
की एक व्यापक उपयोग के लिए अनुमति देता है, लेकिन शायद यह है कि वास्तव में क्या आप चाहते हैं:
आपकी इच्छित "टाइप नलप्टर" 'static_cast (nullptr) 'से अलग कैसे हो सकता है? – Petr
आपका दूसरा विकल्प सबसे अच्छा शर्त जैसा दिखता है ... ओवरलोड (टेम्पलेट विशेषज्ञता) – basav
आपने पहले ही प्रश्न में उत्तर दिया है ... पहला और तीसरा विकल्प समान या कम है: आपको टी * और नलप्टर की आवश्यकता नहीं है, इसलिए आप ' fct (& a, nullptr) ', और दूसरा इसे अनुमति देने के लिए एक स्पष्ट अधिभार का उपयोग करता है। मैं एक और जवाब की कल्पना नहीं कर सकता ... –