Programación General > C/C++
sobrecargar operador []
(1/1)
diego.martinez:
Buenas:
estoy sobrecargando el operador [] en una de mis clases (w32Register : public GRegister) para usarla como un mapa.
--- Código: C++ --- w32Register Reg; Reg.Open("SOFTWARE\Empresa"); std::string value=Reg["Root"];
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++ --- GRegister * Reg=new w32Register(); Reg->Open("SOFTWARE\AgotekArtek"); std::string value=Reg["Root"];
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++ --- std::string w32Register::operator [](std::string index){ std::string S; char s[200]; DWORD size=200; DWORD dwType=0; LONG ret=RegQueryValueEx(hKey,index.c_str(),NULL,&dwType,(LPBYTE)s,&size); if (ret!=ERROR_SUCCESS) return 0; S=s; //creamos un std::string con el buffer return S; //lo pasamos por copia}
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:
Lógico, en el segundo ejemplo que pones, Reg es un puntero, no es un objeto GRegister. Prueba con
--- Código: C++ ---std::string value = *Reg["Root"]; A ver qué tal
diego.martinez:
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
Navegación
Ir a la versión completa