Template giống như một "cỗ máy" có khả năng sản xuất ra các hàm và lớp dựa vào kiểu của các tham số. Bằng cách sử dụng template, bạn có thể chỉ cần thiết kế 1 lớp (hàm) mà có khả năng thao tác với nhiều loại dữ liệu khác nhau, thay vì bạn phải tạo nhiều lớp (hàm) khác nhau để thao tác với từng loại dữ liệu khác nhau.
Ví dụ như, để tạo một hàm có tác dụng lấy giá trị nhỏ nhất của 2 số mà không sử dụng template, bạn phải viết các hàm như sau :
// min for ints
int min( int a, int b )
return ( a < b ) ? a : b;
// min for longs
long min( long a, long b )
return ( a < b ) ? a : b;
// min for chars
char min( char a, char b )
return ( a < b ) ? a : b;
//etc...
Nhưng nếu sử dụng template, bạn có thể giảm số lượng hàm phải viết xuống chỉ còn một hàm như sau :
template <class T> T min( T a, T b )
return ( a < b ) ? a : b;
Nhưng tất cả những cái đó ta đều có thể viết mà không cần dùng template ! Tất nhiên bạn hoàn toàn có thể viết mã mà không cần dùng template nhưng nếu dùng template bạn có thể tiết kiệm được công sức viết mã, tăng thêm tính linh động của chương trình và một điều quan trọng là khả năng sử dụng lại cao. Bạn cũng nên chú ý là template là type-safe, có nghĩa là trình biên dịch không tự chuyển kiểu (type cast) mà bạn phải chuyển nó 1 cách tường minh.