Anuncios

Bienvenidos sean a este post, hoy veremos otro argumento de templates.

Anuncios

Tal como vimos en los argumentos anteriores, este tambien esta relacionado con los parametros template. El correspondiente argumento es el nombre de la template de la clase o un alias de este. Es decir, funcionara mientras encuentre un template que coincide con el argumento template, pero tengan en cuenta que solo seran consideradas templates de clases primarias.

Anuncios

Pero cuales son las templates primarias? Las podemos considerar como las que estan especializadas. Y si bien las listas de parametros pueden coincidir, el compilador no considerara si no estan completamente especializadas. Veamos un ejemplo para entenderlo:

#include <iostream>
#include <typeinfo>

template<class T, class U>
class X
{
public:
        T a;
        U b;
};

template<class U>
class X<int, U>
{
public:
        int a;
        U b;
};

template<template<class T, class U> class V>
class Y
{
public:
        V<int, char> i;
        V<char, char> j;
};

Y<X> c;
int main()
{
        std::cout << typeid(c.i.a).name() << std::endl;
        std::cout << typeid(c.i.b).name() << std::endl;
        std::cout << typeid(c.j.a).name() << std::endl;
        std::cout << typeid(c.j.b).name() << std::endl;

        return 0;
}
Anuncios
Anuncios

La libreria typeinfo la importamos para poder usar la funcion typeid en el main. La primera clase que definimos tendra un template con dos clases para poder usar en nuestras propiedades. La segunda clase es una especializacion parcial de la anterior. En este caso, especializamos a la primera con el tipo int y el segundo sigue siendo generico. Y este lo aplicamos a la primer propiedad. Luego tenemos un parametro template donde pasamos la primer clase como template. Esta la usaremos para establecer a las propiedades de esta clase pero observen un detalle. La primera propiedad usara a la especializacion de la clase X y la segunda usara a la primera definicion. Lo siguiente es crear un objeto de la ultima clase. En el main, mostraremos el resultado de usar a typeid en las distintas propiedades de cada clase para mostrar el nombre identificador mediante la funcion name. Compilemos y veamos como es la salida:

$ ./arg
i
c
c
c
$
Anuncios

Observen como nos paso la primer letra de cada tipo que se obtuvo meddiante typeid. Este es el ulttimo de argumentos que tenemos para poder pasar a los parametros de template.

Anuncios

En resumen, hoy hemos visto a argumentos template, que es, para que sirve, como se aplica, y un ejemplo para verlo en accion. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donatión

It’s for site maintenance, thanks!

$1.50