13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!