Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre Templates...

Iniciado por MChiz, 18 de Noviembre de 2004, 03:09:31 PM

« anterior - próximo »

MChiz

 Hola a todos!

Hace mucho que no escribo por aqui, pero os sigo leyendo cuando puedo =)

Tengo una duda acerca de los templates, aunque lamentablemente cada vez es menos duda =/

Yo tengo:

main.cpp
#include "Test.h"

void f( int a ) {
}

void main( ) {
   CTest t;

   t.foo( &f );
}

Test.h
class CTest {
public:
   CTest( ) {
   }

   template < typename TReturn, typename TArg1 >
   void foo( TReturn ( *ptr_func )( TArg1 arg1 ) );

};

Mi pregunta es: Hay alguna forma de poder hacer que la funcion templatizada este en un CPP para no tener que verla desde todos los CPPs que incluyan Test.h, sin tener que especializar el template?

He estado buscando y buscando y lo que creo que quiero es una palabra reservada llamada 'export', pero que solamente la implementa un compilador hoy en dia ( ahora no recuerdo el nombre ).
Me parece que pido algo imposible, pero si alguien sabe algo...

Muchas gracias!! =)

talueKs!!

Zaelsius

 Sólo se me ocurre que la aisles mediante un "namespace".


martiño

 El estandar de C++ no pone ningun impedimento a hacer funciones con templates en CPPs, pero creo que solo el Comeau lo hace realmente, para el resto de compiladores no te queda mas remedio que poner los templates en los .Hs, siempre que quieras llamar al template desde otro modulo claro está, si solo vas a llamar al template en ese CPP si que puede ponerlo ahí.

MChiz

 Holap!

ZaelSiuS:
No veo como hacer lo que me dices... no te entiendo. Si no es mucha molestia, podrias ponerme un breve ejemplillo, por favor?

martiño:
Sí, ya he leido que 'export, en teoría, es estandar de C++, pero parece que se lo van a cepillar.
Evidentemente lo que me interesa es utilizar el template desde otro CPP, si no no tendría ningún problema ;>

Gracias a los dos.

Zaelsius

 
Cita de: "MChiz"ZaelSiuS:
No veo como hacer lo que me dices... no te entiendo. Si no es mucha molestia, podrias ponerme un breve ejemplillo, por favor?

Yo comentaba lo del namespace como una solución para "no ver" la función o plantilla desde otros módulos. Un ejemplo, aunque creo que ya sabes de qué va el tema (rules)  

main.cpp

#include "cabecera.h"

void main()
{

 espacio::pair < int > mipareja(6,9);

}


cabecera.h


namespace espacio
{

template <class T>
class pair {
   T values [2];
 public:
   pair (T first, T second)
   {
     values[0]=first; values[1]=second;
   }
};


}



Si no indicas el "espacio::" el compilador te manda a paseo, ¿te sirve algo asi?






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.