SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: diego.martinez en Lunes 1 de Junio de 2009, 10:10

Título: sobrecargar operador []
Publicado por: diego.martinez en Lunes 1 de Junio de 2009, 10:10
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!!
Título: Re: sobrecargar operador []
Publicado por: m0skit0 en Lunes 1 de Junio de 2009, 10:42
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
Título: Re: sobrecargar operador []
Publicado por: diego.martinez en Lunes 1 de Junio de 2009, 11:30
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