Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 484 — #522<br />
✐<br />
Capítulo 16. Introducción a las Plantillas<br />
cont<strong>en</strong>edor que maneje un tipo <strong>en</strong> concreto, se hac<strong>en</strong> un par de llamadas a macros.<br />
Desafortunadam<strong>en</strong>te, esta aproximación era confusa para toda la literatura exist<strong>en</strong>te<br />
de Smalltalk y para la experi<strong>en</strong>cia de programación, y era un poco inmanejable.<br />
Básicam<strong>en</strong>te, nadie la <strong>en</strong>t<strong>en</strong>día.<br />
Mi<strong>en</strong>tras tanto, Stroustrup y el equipo de <strong>C++</strong> de los Laboratorios Bell habían<br />
modificado su aproximación de las macros, simplificándola y moviéndola del dominio<br />
del preprocesador al compilador. Este nuevo dispositivo de sustitución de código<br />
se conoce como template 4 (plantilla), y repres<strong>en</strong>ta un modo completam<strong>en</strong>te difer<strong>en</strong>te<br />
de reutilizar el código. En vez de reutilizar código objeto, como <strong>en</strong> la her<strong>en</strong>cia<br />
y <strong>en</strong> la composición, un template reutiliza código fu<strong>en</strong>te. El cont<strong>en</strong>edor no maneja una<br />
clase base g<strong>en</strong>érica llamada Object, si no que gestiona un parámetro no especificado.<br />
Cuando se usa un template, el parámetro es sustituido por el compilador, parecido<br />
a la antigua aproximación de las macros, pero más claro y fácil de usar.<br />
Ahora, <strong>en</strong> vez de preocuparse por la her<strong>en</strong>cia o la composición cuando se quiera<br />
usar una clase cont<strong>en</strong>edora, se usa la versión <strong>en</strong> plantilla del cont<strong>en</strong>edor y se crea<br />
una versión específica para el problema, como lo sigui<strong>en</strong>te:<br />
Cont<strong>en</strong>edor<br />
de Figuras<br />
Figura<br />
Figura<br />
Figura<br />
Figura 16.3: Cont<strong>en</strong>edor de objetos Figura<br />
El compilador hace el trabajo por nosotros, y se obti<strong>en</strong>e el cont<strong>en</strong>edor necesario<br />
para hacer el trabajo, <strong>en</strong> vez de una jerarquía de her<strong>en</strong>cia inmanejable. En <strong>C++</strong>, el<br />
template implem<strong>en</strong>ta el concepto de tipo parametrizado. Otro b<strong>en</strong>eficio de la aproximación<br />
de las plantillas es que el programador novato que no t<strong>en</strong>ga familiaridad o<br />
esté incómodo con la her<strong>en</strong>cia puede usar las clases cont<strong>en</strong>edoras de manera adecuada<br />
(como se ha estado haci<strong>en</strong>do a lo largo del libro con el vector).<br />
16.3. Sintaxis del Template<br />
La palabra reservada template le dice al compilador que la definición de clases<br />
que sigue manipulará uno o más tipos no especificados. En el mom<strong>en</strong>to <strong>en</strong> que el<br />
código de la clase actual es g<strong>en</strong>erado, los tipos deb<strong>en</strong> ser especificados para que el<br />
compilador pueda sustituirlos.<br />
Para demostrar la sintaxis, aquí está un pequeño ejemplo que produce un array<br />
con límites comprobados:<br />
//: C16:Array.cpp<br />
#include "../require.h"<br />
#include <br />
using namespace std;<br />
template<br />
4 La inspiración de los templates parece v<strong>en</strong>ir de los g<strong>en</strong>erics de ADA<br />
484<br />
✐<br />
✐<br />
✐<br />
✐