Wahrscheinlich keine Verwendung in Ihrem Beispiel, aber es gibt einige Situationen, in denen es schwierig ist, mit void
im Vorlagencode umzugehen, und ich erwarte, dass diese Regel manchmal dabei hilft. Sehr konstruiertes Beispiel:
#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>();
}
Beachten Sie, dass nur main
mit der Tatsache fertig werden muss, dass im void
Fall gibt es nichts von retval
zurückzukehren. Die Zwischenfunktion do_something_and_return
ist generisch.
Natürlich ist dies nur so weit kommt - wenn do_something_and_return
wollte, im Normalfall, retval
in einer Variablen zu speichern und mit ihm etwas tun vor der Rückkehr, dann würden Sie noch in Schwierigkeiten - du müss spezialisieren (oder überladen) do_something_and_return
für void.
Danke. Alle Antworten waren gut, aber dieser hat den Punkt schön illustriert. – kirk0