Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Puntatore a puntatore
Forum - C/C++ - Puntatore a puntatore

Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 16:21
Lunedì, 28/05/2012
Ciao a tutti!

Immaginiamo di avere questa situazione:

Codice sorgente - presumibilmente C++

  1. class A
  2. {
  3.   void metodo_A (tipoA* x, tipoA* y, tipoA* z);
  4. };
  5.  
  6. class B : public class A
  7. {
  8.  void metodo_B ();
  9. };



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

In particolare, il corpo di metodo_B è questo:

Codice sorgente - presumibilmente C/C++

  1. void class B::metodo_B ()
  2. {
  3.  tipoB* x, y, z;
  4.  x=NULL;
  5.  y=NULL;
  6.  z=NULL;
  7.  
  8.  class A::metodo_A (cast2tipo_A (*x), cast2tipo_A (*y), cast2tipo_A (*z));
  9.  
  10.  // esegui altre operazioni su x, y e z
  11. }



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:

Codice sorgente - presumibilmente C++

  1. class A
  2. {
  3.  void metodo_A (tipoA** x, tipoA** y, tipoA** z);
  4. };
  5.  
  6. class B : public class A
  7. {
  8.  void metodo_B ();
  9. };


...e...
Codice sorgente - presumibilmente C/C++

  1. void class B::metodo_B ()
  2. {
  3.  tipoB* x, y, z;
  4.  x=NULL;
  5.  y=NULL;
  6.  z=NULL;
  7.  
  8.  class A::metodo_A (cast2tipo_A** (&x), cast2tipo_A** (&y), cast2tipo_A** (&z));
  9.  
  10.  // esegui altre operazioni su x, y e z
  11. }



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ò il 28/05/2012 alle 16:23
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:20
Lunedì, 28/05/2012
Forse dovresti descriverci il problema da un punto di vista progettuale... questa soluzione sembra contorta.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote