Questa è una domanda su come implementare alcune esigenze che ho avuto ultimamente. Sono sicuro che esiste un modello o una soluzione comune per questo e, anche se ne ho avuto uno, sono ansioso di saperne di più.Metodi C++ in classi derivate con parametri diversi
Supponiamo che io stia lavorando in un gioco in cui tutte le entità correlate al gioco stesso derivino da una classe "Attore" (diciamo "ostacolo", "ostacolo in movimento", "proiettile" e "cannone"). Nel gioco, tutte le entità sono memorizzate in un vettore std::vector<Actor *>
in modo che possano essere attraversate.
Ora, supponiamo che ogni "attore" possa "fare" qualcosa ad ogni turno e diamo loro un "atto" di metodo. Obstacle :: act farebbe poco, Moving_obstacle :: act e Projectile :: act li sposterebbe e "Cannon :: act" creerebbe un nuovo proiettile. E 'una sorta di senso avere una funzione virtuale pura Attore :: agire in modo da poter a sua volta fare qualcosa di simile:
std::vector<Actor *>::iterator b=myvectorofactors.begin(), e=myvectorofactors.end();
while(b < e)
{
*b->act();
b++;
}
E li hanno tutti "agire". Bene, finora tutto bene ... Il fatto è che Cannon :: act potrebbe avere un prototipo diverso o un valore di ritorno (per esempio, per memorizzare un proiettile generato e averlo spinto nel vettore) e questa "piccola" differenza rompe tutto.
Ora, so che da un certo punto di vista questi sovraccarichi di metodo sono funzioni completamente diverse ciascuno. So anche che si può sempre pianificare in anticipo e ingegnare attraverso il problema con sufficiente lungimiranza ... O si può semplicemente manovrare il problema.
In questo caso, ho appena usato diversi identificatori univoci per ogni classe di attori derivati e li ho usati per trasmettere alla corrispondente classe e fare il lavoro che li circonda. Sono sicuro che tornerò lo stesso problema ancora una volta e sono curioso di sapere su alcune soluzioni entry level.
Grazie in anticipo per il vostro tempo.
meno muro di testo, altro esempio di codice, si prega di – David
non sono d'accordo @ Dave, è un pozzo domanda ponderata. – Nick
Si potrebbe voler guardare il [modello visitatore] (http://en.wikipedia.org/wiki/Visitor_pattern). – Nick