• Martes 12 de Noviembre de 2024, 20:36

Autor Tema:  interfaz para std::map  (Leído 1001 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
interfaz para std::map
« en: Martes 26 de Enero de 2010, 12:21 »
0
buenas:

estamos haciendo una interfaz para poder cambiar en un proyecto entre std::map o std::vector.

Para ello estamos haciendo un objeto que contendra a uno de estos, y dispondrá de todos los metodos del mapa, para que, una vez implementado , podamos alterar solo el interfaz sin que el proyecto sea afectado.

Esto va bien:

Código: C++
  1.  
  2.  
  3. template <class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key,T> > >
  4. class CMAP
  5. {
  6. public:
  7.   map<Key,T,Compare,Allocator > Internal;
  8.  
  9.   unsigned int size() const
  10.   {
  11.     return Internal.size();
  12.   };
  13.  
  14.   T& operator[](const Key& k)
  15.   {
  16.   return Internal[k];
  17.   }
  18.  
  19.   void clear()
  20.   {
  21.   Internal.clear();
  22.   }
  23.    
  24. };
  25.  
  26.  
  27.  


Por ahora va bien, pero me esta dando un problema al intentar devolver un iterador.
Código: C++
  1.  
  2.   map<Key,T,Compare,Allocator >::iterator begin()
  3.   {
  4.      return Internal.begin();
  5.   }
  6.  
  7.  

el compilador me devuelve:
Error[Pe757]: nontype "map<_Kty, _Ty, _Pr, _Alloc>::iterator [with _Kty=Key, _Ty=T, _Pr=Compare, _Alloc=Allocator]" is not a type name


como puedo hacer para devolver iteradores con los tipos correctos?


gracias!!!

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: interfaz para std::map
« Respuesta #1 en: Martes 26 de Enero de 2010, 15:48 »
0
parece que a la hora de pasar templates hay algun problema con como lo definí.

deberia haber hecho:
Código: C++
  1.  
  2.   typedef typename map<_Kty,_Ty>::iterator iterator;
  3.  
  4.  

resuelto!