[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