#define-makroilla voidaan tehdä tyypistä riippumaton funktio. Makrojen huonot puolet on kuitenkin jo todettu. C++:ssa voidaan template -"tyyppimäärityksen" avulla generoida useita funktiota samalla "funktiomallilla":
/* TEMPFUN.CPP */ #include <stdio.h> ... template <class T> T max(T a,T b) { return a > b ? a : b; } template <class T> void swap(T &a, T &b) { T t; t = a; a = b; b = t; } int main(void) { int ia = 3 , ib = 5 ,ic = max(ia,ib); double da = 3.1, db = 5.2 ,dc = max(da,db); tulosta(ic); tulosta(dc); swap(ia,ib); tulosta(ia); tulosta(ib); swap(da,db); tulosta(da); tulosta(db); return 0; }Käytännössä kääntäjä generoi uuden tyyppejä vastaavan funktion (generoitu funktio = template function), kun funktiomallia kutsutaan uusilla "tuntemattomilla" parametreilla.