Está en la página 1de 2

TEMPLATES EN C++

Los templates son muy importantes en el desarrollo de software con C++. Es sin duda una de las caracteristicas mas importantes (si no es la mas importante) de este lenguaje. Nos permite escribir codigo generico que puede ser usado con varios tipos de datos. Sin templates, se tendrian que reescribir muchas funciones y clases. Tomemos el siguiente ejemplo de una funcion que retorna el maximo de dos valores. int max(int x, int y) { return (x < y) ? y : x; } float max(float x, float y) { return (x < y) ? y : x; } Como podemos ver, sin templates dos funciones que tienen el mismo cuerpo se tienen que reescribir para que funcione con varios tipos. Veamos la misma funcion usando templates. template <typename T> T max(T x, T y) { return (x < y) ? y : x; } Esta funcion funciona con cualquier tipo que se pueda comparar con el operador <. Funciona hasta con tu propia clase si ella tiene el operador < implementado. Tambien se puede tener templates para clases. Clases como std::vector y std::listson templates y nos permiten usarlas para cualquier tipo que querramos. Veamos un ejemplo de una clase template. template <typename T> class Puntero { T* _ptr; public: explicit Puntero(T* ptr = 0) : _ptr(ptr) {} ~Puntero() { delete _ptr; } // implementamos estos operadores para que la clase actue como puntero

T& operator*() { return *_ptr; } T* operator->() { return _ptr; } }; int main() { Puntero<int> puntero_int(new int); *puntero_int = 10; Puntero<bool> puntero_bool(new bool); *puntero_bool = true; } Ahi podemos ver una clase (incompleta) que trata de personificar un puntero. Cuando se destruye una instancia de esta clase, tambien destruye el puntero que contenia. Ahi pueden ver lo facil que es hacer una clase generica y los beneficios que esto trae. Sin templates, hubiera tenido que copiar la misma clase dos veces, cambiando int por bool solamente. Ahi se va notando que el reuso del codigo puede ser significativo al usar templates. Imaginense reimplementar std::vector por cada tipo que se quiera usar

También podría gustarte