शायद आपके उदाहरण में कोई उपयोग नहीं है, लेकिन कुछ स्थितियां हैं जहां टेम्पलेट कोड में void
से निपटना मुश्किल है, और मुझे उम्मीद है कि यह नियम कभी-कभी उसमें सहायता करता है। बहुत काल्पनिक उदाहरण:
#include <iostream>
template <typename T>
T retval() {
return T();
}
template <>
void retval() {
return;
}
template <>
int retval() {
return 23;
}
template <typename T>
T do_something() {
std::cout << "doing something\n";
}
template <typename T>
T do_something_and_return() {
do_something<T>();
return retval<T>();
}
int main() {
std::cout << do_something_and_return<int>() << "\n";
std::cout << do_something_and_return<void*>() << "\n";
do_something_and_return<void>();
}
ध्यान दें कि केवल main
तथ्य void
मामले में retval
से लौटने की कोई बात नहीं है कि से निपटने के लिए है। इंटरमीडिएट फ़ंक्शन do_something_and_return
सामान्य है।
बेशक यह आपको केवल इतना ही प्राप्त करता है - अगर do_something_and_return
सामान्य स्थिति में retval
को एक चर में संग्रहीत करने और लौटने से पहले इसके साथ कुछ करने के लिए चाहते थे, तो आप अभी भी परेशानी में होंगे - आपको शून्य के लिए do_something_and_return
विशेषज्ञ (या अधिभार)।
स्रोत
2010-08-08 15:29:26
धन्यवाद। सभी जवाब अच्छे थे, लेकिन इसने इस बिंदु को अच्छी तरह से चित्रित किया। – kirk0