[C con Clase] Un error con plantillas en GCC y no en Visual Studio (Parte II)

Steven Davidson srd4121 en njit.edu
Mie Jun 2 20:53:43 CEST 2010


Hola Gilberto,

Gilberto Cuba Ricardo wrote:
>> Sí. Hay muy poco acerca de esta situación. Por eso me tuve que
>> remitir a la gramática del lenguaje para entender la sintaxis
>> correctamente.
> 
> Cuando usted dice la grámatica, está recurriendo a su memoria o a
> algún documento en especial sobre la gramática. En especial yo me
> estaba remitiendo a http://www2.research.att.com/~bs/SC22-N-4411.pdf
> el cual es un borrador del próximo C++0x.
> 

No es recomendable que me base en mi memoria :(

Para la gramática, me remito al libro de Bjarne Stroustrup llamado "The 
C++ Programming Language" - "El Lenguaje de Programación C++"; tengo la 
3ª edición. En concreto, el apéndice A trata de la sintaxis del lenguaje.

>>>     template <class T> template <class ST>
>>>     X<T>::stt<ST> X<T>::method()
>>>       {
>>>           stt<ST> myvar;
>>>           myvar.st = "un texto";
>>>           return myvar;
>>>       }
> 
> Yo más bien hacía referencia a esta parte, en la que hay que tener
> en cuenta que deben hacerse referencia a las dos plantillas, una a

Sí; lo entiendo. En la próxima revisión del curso de C++, intentaremos 
agregar un ejemplo acerca de esto.

> continuación de la otra (aunque no sé si podrá existir otra forma), y
> acontinuación la definición de la función miembro con los parámetros
> de las plantillas.
> 

No creo que exista otra forma, al menos que uno quiera "mudar" el 
parámetro de la plantilla 'stt' a la lista de parámetros de la plantilla 
'X'. Esto es,

template< typename T, typename ST >
class X
{
public:
   struct stt
   {
     ST st;
   };

   stt method();
};

template< typename T, typename ST >
typename X<T,ST>::stt X<T,ST>::method()
{
   stt myvar;
   myvar.st = "un texto";
   return myvar;
}

Esto funcionará, pero no es equivalente al ejemplo que dio.

> Seguro, aunque es un tanto tedioso toda esta parte de las plantillas
> en C++.
> 

Lo entiendo. Me parece que uno ya está "cansado" de aprender C++ al 
llegar a este tema de las plantillas, porque se suele presentar justo al 
final del tema de C++. Además, las plantillas no son tan necesarias en 
un programa de C++, así que creo que la gente intenta olvidarse de todo 
este "tinglado".


Hasta pronto,

Steven




Más información sobre la lista de distribución Cconclase