Oppure

Loading
28/05/12 14:21
MagoAntò
Ciao a tutti!

Immaginiamo di avere questa situazione:

class A
{
  void metodo_A (tipoA* x, tipoA* y, tipoA* z);
};

class B : public class A
{
 void metodo_B ();
};


Classe B è sottoclasse di A ed entrambe definiscono un certo "metodo_".

In particolare, il corpo di metodo_B è questo:

void class B::metodo_B ()
{
 tipoB* x, y, z;
 x=NULL;
 y=NULL;
 z=NULL;

 class A::metodo_A (cast2tipo_A (*x), cast2tipo_A (*y), cast2tipo_A (*z));

 // esegui altre operazioni su x, y e z
}


In parole povere, in metodo_B ci sono tre puntatori x, y e z dello stesso tipo della classe che vengono castati al tipo della superclasse all'atto della chiamata di metodo_A. Fin qui, tutto ok. Il problema nasce nel momento in cui i tre puntatori vengono modificati nel corpo di metodo_A. Ho bisogno, in pratica, di farmi restituire i nuovi valori dei puntatori. Ho pensato, così, di utilizzare dei puntatori a puntatori. I codici diventano:

class A
{
 void metodo_A (tipoA** x, tipoA** y, tipoA** z);
};

class B : public class A
{
 void metodo_B ();
};

...e...
void class B::metodo_B ()
{
 tipoB* x, y, z;
 x=NULL;
 y=NULL;
 z=NULL;

 class A::metodo_A (cast2tipo_A** (&x), cast2tipo_A** (&y), cast2tipo_A** (&z));

 // esegui altre operazioni su x, y e z
}


Il compilatore mi da errore nel caso usassi lo static_cast, suggerendomi di usare il reinterpret_cast che, però, non credo sia la scelta più elegante, seppur funzionante.

Avete dei suggerimenti alternativi da darmi?

Grazie in anticipo!
Ultima modifica effettuata da MagoAntò 28/05/12 14:23
aaa
28/05/12 20:20
pierotofy
Forse dovresti descriverci il problema da un punto di vista progettuale... questa soluzione sembra contorta.
Il mio blog: piero.dev