?
hustbaer schrieb:
Ich will in "meiner" Variante garnix damit machen, weil das IMO Mist ist. Bei einem Funktionstemplate Template-Argumente mitzugeben, wenn diese deduziert werden können, ist IMO so unsauber, dass man darauf keinerlei Rücksicht nehmen muss.
Der Punkt ist doch, dass das korrektes C++ ist. Dem Aufrufer ist doch egal welches f() dann letztlich das Ergebnis liefert, er erwartet aber, dass es sinnvoll ist. Du als Entwickler hast aber keine Chance solch einen Aufruf mit deiner normalen überladenen Funktion abzufangen.
Man kann auch ein Beispiele konstruieren, in welchen dir solche Aufrufe natürlicher vorkommen bzw. unabdingbar sind:
template<class T1, class T2>
T1 f( T2 myT2)
{
return T1();
}
template<class T1, class T2>
T1 f( T2 *myT2)
{
return T1();
}
//...
int i;
int *pi1 = f<int*>(i);
int *pi2 = f<int*>(&i);
hustbaer schrieb:
BTW: bist du dir darüber im Klaren, dass bei deiner Variante hier das Template "template<typename T> void foo(T)" aufgerufen wird, und NICHT "template<typename T> void foo(T*)"?
Wo mit einer Spezialisierung reagiert werden kann, während einem ohne Spezialisierung der Fall durch die Finger rutscht.
hustbaer schrieb:
Und genau sowas halte ich für total kontraintuitiv.
Da gebe ich dir Recht, das hat aber in diesem Fall nichts mit Templatespezialisierung vs. Überladene Funktion zu tun. Da hätte man auch ohne Spezialisierung/Funktion intuitiv etwas anderes erwartet.
hustbaer schrieb:
1)...
2)...
3)...
4)...
Ich würde sagen, man soll versuchen den Entwurf einfach zu halten, denn egal wie du es letztlich auch machst, wenn es komplizierter wird mit Überladung oder Spezialisierung, mehreren Parametern usw. wird dir kaum einer ad hoc intuitiv sagen können was für einen bestimmten Aufruf genau passiert.
hustbaer schrieb:
p.S.: noch ein lustiges Beispiel dafür, wieso Funktions-Template-Spezialisierungen böse sind:
Sind sie wirklich böse, oder hättest du es nur anders erwartet?
So, für mich war es das. Ich finde wir sind sowieso schon zu lange auf dieser Nebensächlichkeit herumgeritten. Daher fällt es mir auch nicht schwer deine Meinung zu akzeptieren. Meinetwegen. Wenn also jemand in diesen Abwägungsprozess kommt kann er sich auch GRUNDSÄZTLICH für Überladung mit einer normalen Funktion entscheiden. Es ist ja kein Schuss ins Knie ...