[C con Clase] Buenos días, tengo un problema con pool de objetos.

Davidson, Steven srd4121 en njit.edu
Mie Abr 8 15:45:51 CEST 2015


Hola Miguel Ángel,

2015-04-08 0:53 GMT-04:00 Miguel Ángel Torres Fernández-Píñar <
miguelangeltorresfp en gmail.com>:

> uf, Steven, muchísimas gracias por todos tus apuntes.
>
> Me sirve muchísimo todo esto y me hace darme cuenta del enorme camino que
> me queda aun por delante siquiera para ser un programador junior.
>
>
Siempre estamos aprendiendo - incluso los más veteranos.

De veras, muchas gracias por tu esfuerzo y tiempo desinteresado.
>
>
De nada; para eso estamos :)

De momento comparto esta duda en relación a lo que indicaste arriba.
>
> He probado a usar :
>
> // Get
> const T & operator [] ( std::vector<T>::size_type index) const;
>
> Pero me funciona si le coloco *typename *delante : ( aunque no entiendo
> muy bien todo eso )
>
> // Get
> const T & operator [] (typename std::vector<T>::size_type index) const;
>

Sí. Tienes toda la razón del mundo; ha sido un descuido mío. Como a estas
alturas el compilador no ha creado la clase 'std :: vector< int >', 'std ::
vector< std :: string >', 'std :: vector< float >', o la que exista en su
momento. Sin embargo, el compilador sí puede comprobar ciertos aspectos de
la plantilla usando la gramática. El problema es que no sabe lo que es
'size_type' por lo que no puede determinar si su uso es correcto.

La solución es obligar al compilador a aceptar que la entidad que
escribimos sí es el nombre de un tipo de dato anteponiendo el vocablo,
'typename'. Por lo tanto, si en cualquier momento escribes una expresión
que se consideraría ambigua, lo más seguro es que escribiendo 'typename' se
eliminaría tal ambiegüedad.


Por cierto, otro consejo es que definas tipos de datos dentro de la
plantilla; por ejemplo,

template< typename T >
class pool
{
public:
  typedef T value_type;
  typedef T * pointer_type;
  typedef const T * const_pointer_type;
  typedef T & reference_type;
  typedef const T & const_reference_type;

  typedef std::vector<value_type> vector_type;
  typedef typename vector_type::size_type size_type;
  ...
};


Espero que esto te ayude.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150408/9b3dca4d/attachment.html>


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