|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6229
|
[C++] Incognita classi derivate
Ciao ragazzi,
ho un dubbio su un programma che sto sviluppando in C++. Dunque, questo programma legge degli eventi da un file di testo. Gli eventi possono essere di due tipi, supponiamo EVENTOA, EVENTO_B. Ora, al momento c'è una classe base EVENTO, e le due derivate A e B, ognuna delle quali gestisce l'evento appropriato. il fatto è che a priori non so quale delle due classi derivare, in quanto dipende da quello che c'è scritto nel file di testo. Quindi, come posso reimpostare il codice in maniera adatta al problema? Ovviamente vorrei evitare di derivarle entrambe, in quanto non è detto che ci siano sempre entrambi gli eventi. Siccome il file di testo è letto dalla classe base, avevo pensato di analizzare il primo evento e poi dalla classe base creare oggetti figli, e da lì far partire il tutto. Ma non credo che sia molto elegante. Thanks |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Direi che non è proprio bello fare una classe base non astratta, significa che c'è bisogno di un ulteriore livello di astrazione.
Supponiamo che la prima riga della parte del testo relativa alla classe permetta di discriminare quale classe istanziare (supponiamo che ci sia scritto "EVENT_A" o "EVENT_B". Leggi la prima riga e la passi ad un factory method... Codice:
static Event * YourClass::MainFactoryMethod(string classType)
{
return (classType.compare("EVENT_A") == 0) ? new EventA() : ((classType.compare("EVENT_B") == 0) ? new EventB() : new NullEvent());
}
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6229
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Spiega meglio.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6229
|
Allora,
dquando gestisco i vari eventi, la prima volta che incointro quel tipo di evento, faccio l'apposita derivazione. Quindi nel main ho una cosa del genere, al momento: Codice:
TestFactory prova(argv[1], rank, num_procs,false); prova.MainFactoryMethod(); prova.start_computation(); |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per questo devi semplicemente fare una nuova classe che fa il parsing del file, ogni volta che incontra una nuova istanza nel file di testo chiama il factory method.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:04.




















