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 487 — #525<br />

✐<br />

16.3. Sintaxis del Template<br />

permitir esto; hay que investigar la docum<strong>en</strong>tación del compilador concreto para<br />

usarlo.<br />

Algunas personas si<strong>en</strong>t<strong>en</strong> que poner el código fu<strong>en</strong>te de la implem<strong>en</strong>tación <strong>en</strong><br />

un archivo cabecera hace posible que se pueda robar y modificar el código si se<br />

compra la librería. Esto puede ser una característica, pero probablem<strong>en</strong>te dep<strong>en</strong>da<br />

del modo de mirar el problema: ¿Se está comprando un producto o un servicio Si es<br />

un producto, <strong>en</strong>tonces hay que hacer todo lo posible por protegerlo, y probablem<strong>en</strong>te<br />

no se quiera dar el código fu<strong>en</strong>te, sino sólo el código compilado. Pero mucha g<strong>en</strong>te<br />

ve el software como un servicio, incluso más, como un servicio por suscripción. El<br />

cli<strong>en</strong>te quiere nuestra pericia, quier<strong>en</strong> que se mant<strong>en</strong>ga ese fragm<strong>en</strong>to de código<br />

reutilizable para no t<strong>en</strong>erlo que hacer él - para que se pueda <strong>en</strong>focar <strong>en</strong> hacer su<br />

propio trabajo. Personalm<strong>en</strong>te creo que la mayoría de los cli<strong>en</strong>tes le tratarán como<br />

una fu<strong>en</strong>te de recursos a t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta y no querrán poner <strong>en</strong> peligro su relación<br />

con usted. Y para los pocos que quieran robar <strong>en</strong> vez de comprar o hacer el trabajo<br />

original, de todas formas probablemante tampoco se mant<strong>en</strong>drían con usted.<br />

16.3.2. IntStack como plantilla<br />

Aquí está el cont<strong>en</strong>edor y el iterador de IntStack.cpp, implem<strong>en</strong>tado como<br />

una clase cont<strong>en</strong>edora g<strong>en</strong>érica usando plantillas:<br />

//: C16:StackTemplate.h<br />

// Simple stack template<br />

#ifndef STACKTEMPLATE_H<br />

#define STACKTEMPLATE_H<br />

#include "../require.h"<br />

template<br />

class StackTemplate {<br />

<strong>en</strong>um { ssize = 100 };<br />

T stack[ssize];<br />

int top;<br />

public:<br />

StackTemplate() : top(0) {}<br />

void push(const T& i) {<br />

require(top < ssize, "Too many push()es");<br />

stack[top++] = i;<br />

}<br />

T pop() {<br />

require(top > 0, "Too many pop()s");<br />

return stack[--top];<br />

}<br />

int size() { return top; }<br />

};<br />

#<strong>en</strong>dif // STACKTEMPLATE_H ///:~<br />

Hay que darse cu<strong>en</strong>ta que esta plantilla asume ciertas características de los objetos<br />

que está manejando. Por ejemplo, StackTemplate asume que hay alguna<br />

clase de operación de asignación a T d<strong>en</strong>tro de la función push(). Se puede decir<br />

que una plantilla «implica una interfaz» para los tipos que es capaz de manejar.<br />

Otra forma de decir esto es que las plantillas proporcionan una clase de mecanismo<br />

de tipado débil <strong>en</strong> <strong>C++</strong>, lo cual es típico <strong>en</strong> un l<strong>en</strong>guaje fuertem<strong>en</strong>te tipado. En<br />

vez de insistir <strong>en</strong> que un objeto sea del mismo tipo para que sea aceptable, el tipado<br />

487<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!