Personligen gillar jag templates mest eftersom jag tycker att just templates är en av de absolut bästa egenskaperna som språket har att erbjuda trots att det ökar kompileringstiderna. Dock så kan det tyvärr resultera i helt otydbara felmeddelanden när t.ex. > operatorn inte är implementerad för någon typ som man använder.
overloading har det också sin nackdelar det är inte alltid helt uppenbart vilken funktion som kommer att väljas.
Följande exempel är löjligt och ganska dumt men visar på vad jag menar.
#include <iostream>
void funktion(int a)
{
std::cout << "Valde int" << std::endl;
}
void funktion(short a)
{
std::cout << "Valde short" << std::endl;
}
int main(int argv, char ** argc)
{
funktion(5);
return 0;
}
Vilken funktion tror du väljs? Om man inte talar ISO/IEC 14882:2011 (C++ standarden) flytande eller har en kopia till hands kanske det inte är helt trivialt att ta reda på varför resultatet blir som det blir heller.
Men om man jobbar med typer som inte på något trivialt sätt kan konverteras till varandra så är det ett bra sätt att få saker att fungera utan större ansträngning.
Hoppas det hjälper.