Templates en c++

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Templates en c++

Notapor Mightygaver » Dom Jun 12, 2011 2:48 pm

Viendo el tema de la inclusión de diversos ficheros en c++ me vino una duda que me ha surgido recientemente.

¿Hay alguna manera de definir un .hpp que tenga una clase plantilla y que compile con cualquier tipo de dato?
El compilador de c++, si no me equivoco, copia el código de una plantilla para cada tipo de datos con el que comprueba que va a instanciarse, por lo que supongo que le hará falta el código o el objeto compilado para hacerlo, comprobando que el tipo cumple con todos los operadores y métodos utilizados en la plantilla.

Si alguien conoce alguna manera le estaría agradecido :D. La verdad es que me da bastante pena tener que incluir un .cpp directamente, que es la única manera que conozco de utilizar templates en el código, y últimamente me ha dado por refrescar conceptos del lenguaje. Después de pasarme un tiempo programando en C# algunas cosas parecen feas, pero no me gusta todo lo que se mueve últimamente con .NET, así que a ver si me reciclo un poco con C++ :D.
Mightygaver
 
Mensajes: 69
Registrado: Vie Ago 27, 2010 5:46 pm
Ubicación: Vila-real, España

Re: Templates en c++

Notapor Juanxo » Dom Jun 12, 2011 6:56 pm

me he perdido un poco... los templates no tienen cpp

un ejemplo?
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Templates en c++

Notapor Mightygaver » Dom Jun 12, 2011 7:50 pm

Un ejemplo así tonto sería la implementación de una cola genérica.

Este seria el .hpp

#ifndef QUEUE_H
#define QUEUE_H

template <class T>
class Queue
{
public:
//otros metodos
Queue();
~Queue();
};

#endif


Este seria el .cpp

#include "queue.hpp"

template <class T>
Queue<T>::Queue()
{
//nada
}

template <class T>
Queue<T>::~Queue()
{}


Para utilizarla en un ejecutable necesito incluir el .cpp, ya que si incluyo el .hpp me da el siguiente error:

Código: Seleccionar todo
/tmp/ccOaP9Er.o: In function `main':
test.cpp:(.text+0x10): undefined reference to `Queue<int>::Queue()'
test.cpp:(.text+0x1c): undefined reference to `Queue<int>::~Queue()'


¿Cual es entonces la manera correcta de hacerlo? Llevo bastante tiempo alejado del lenguaje y el único ejemplo que conservo de templates incluye el cpp a pelo, por eso lo he comentado para resolver la duda :D.
Mightygaver
 
Mensajes: 69
Registrado: Vie Ago 27, 2010 5:46 pm
Ubicación: Vila-real, España

Re: Templates en c++

Notapor Juanxo » Dom Jun 12, 2011 9:49 pm

el problema es lo que te comentaba, puesto que el compilador genera clases para cada tipo de plantilla, necesita ver todo en el tiempo de compilación. Por eso los templates no pueden tener un .cpp, si no que tiene que tener todo metido en el h
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Templates en c++

Notapor Geo » Lun Jun 13, 2011 10:58 pm

Como menciona Juanxo, los templates van en los archivos de cabecera, todo su código completo.
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Re: Templates en c++

Notapor Mightygaver » Mar Jun 14, 2011 8:00 am

De acuerdo. Ahora ya tengo claro como debo utilizarlos :D
Gracias :)
Mightygaver
 
Mensajes: 69
Registrado: Vie Ago 27, 2010 5:46 pm
Ubicación: Vila-real, España


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado