Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: MChiz en 18 de Noviembre de 2004, 03:09:31 PM

Título: Sobre Templates...
Publicado por: MChiz en 18 de Noviembre de 2004, 03:09:31 PM
 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!!
Título: Sobre Templates...
Publicado por: Zaelsius en 18 de Noviembre de 2004, 03:13:35 PM
 Sólo se me ocurre que la aisles mediante un "namespace".

Título: Sobre Templates...
Publicado por: martiño en 18 de Noviembre de 2004, 07:57:13 PM
 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í.
Título: Sobre Templates...
Publicado por: MChiz en 18 de Noviembre de 2004, 09:51:10 PM
 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.
Título: Sobre Templates...
Publicado por: Zaelsius en 18 de Noviembre de 2004, 10:37:00 PM
 
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?