• Viernes 8 de Noviembre de 2024, 16:47

Autor Tema:  sobrecargar operador []  (Leído 950 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
sobrecargar operador []
« en: Lunes 1 de Junio de 2009, 10:10 »
0
Buenas:

estoy sobrecargando el operador [] en una de mis clases (w32Register : public GRegister) para usarla como un mapa.

Código: C++
  1.  
  2.         w32Register Reg;
  3.     Reg.Open("SOFTWARE\Empresa");
  4.     std::string value=Reg["Root"];
  5.  
  6.  

esto funciona correctamente, la clase abre la carpeta del registro y con el operador [] sobrecargado accedo a los valores. Todo correcto.
pero si hago :

Código: C++
  1.  
  2.  
  3. GRegister * Reg=new w32Register();
  4.  
  5.     Reg->Open("SOFTWARE\AgotekArtek");
  6.     std::string value=Reg["Root"];
  7.  
  8.  
  9.  

Si lo uso dinamicamente, el compilador me tira : error C2107: illegal index, indirection not allowed
 la definicion del operador la he hecho asi:

Código: C++
  1.  
  2. std::string w32Register::operator [](std::string index)
  3. {   
  4.     std::string S;
  5.     char s[200];
  6.     DWORD size=200;
  7.  
  8.     DWORD dwType=0;
  9.     LONG ret=RegQueryValueEx(hKey,index.c_str(),NULL,&dwType,(LPBYTE)s,&size);
  10.     if (ret!=ERROR_SUCCESS)
  11.         return 0;
  12.  
  13.     S=s; //creamos un std::string con el buffer
  14.    
  15.     return S; //lo pasamos por copia
  16. }
  17.  
  18.  

Como puedo hacer que el operador [] funcione con objetos dinamicos?
se que podria hacer (*Reg)["root"] pero preferiria poder acceder directamente con los punteros.

Gracias!!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: sobrecargar operador []
« Respuesta #1 en: Lunes 1 de Junio de 2009, 10:42 »
0
Lógico, en el segundo ejemplo que pones, Reg es un puntero, no es un objeto GRegister. Prueba con

Código: C++
  1. std::string value = *Reg["Root"];
  2.  
A ver qué tal

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: sobrecargar operador []
« Respuesta #2 en: Lunes 1 de Junio de 2009, 11:30 »
0
si, ya lo habia probado asi, y funciona, lo que queria saber es si hay forma de indicarle que haga el corchete incluso con punteros, supongo que la respuesta es no  <_<

Gracias igualmente