Naprawdę rozumiem, że STL robi wrażenie, ale to chyba nic dziwnego, że nie zawiera większości algorytmów…
Szczerze mówiąc Twój pomysł jest zły pod każdym względem.
Po pierwsze jakie jest uzasadnienie faktu, że prosty wzór ma być zrealizowany w kodzie na szablonie? Chcesz liczyć pole trójkąta na intach? Ale jeżeli tak to przecież mnożenie 0.5*x czy liczenie sqrt(y) prowadzą do niejawnych konwersji i utraty cyfr, np. 0.5 * (1 + 2 + 4) = 3.
Dlaczego niby masz zwracać zero? A dlaczego nie rzucać wyjątek / logować informację o błędzie / ustawiać flagę błędu / … ?
Co jeżeli jeden lub więcej boków będzie ujemnych? Jeżeli zwrócisz 0 to znaczy że utożsamisz trójkąt zdegenerowany z zupełnie bezsensownymi danymi. Różnica jak między “porządnym” zbiorem, zbiorem pustym a zbiorem wszystkich zbiorów w ZFC.
Co z prawami obliczeń zmiennoprzecinkowych?
ERGO:
C++ pozwala na dużo fajnych rzeczy. Fajnie, że się ich uczysz (templatki są użyteczne). Fajnie, że w ogóle czegoś się uczysz
(serio, doceniam). Ale idea templatek NIE polega na tym, że zamiast pisać proste funkcje zaczynasz pisać czary - to jest obfuskowanie kodu. Templatki mają sens gdy np. chcesz stworzyć klasę reprezentującą drzewo i elementy tego drzewa mogą być różnego typu. Wówczas obiekty klasy tworzysz jako obiekty konkretnego typu. Templatki NIE mają sensu jeżeli chcesz stworzyć funkcję, która tak na prawdę w każdym zastosowaniu powinna zostać przemyślana od nowa (bo obliczenia zmiennoprzecinkowe) i właściwie prawie zawsze będzie operować na double.
PS