|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
[C++]Typeid
Sviluppando la mia lib, sono incappato in un problema:
Codice:
/** * <b>Virtuale:</b> no * <b>Funzione:</b> Parserizza le informazioni * <b>Argomenti:</b> constante a Object * <b>Return:</b> - * <b>Eccezioni:</b> - */ void Object::ParseInfo(const Object *obj) { if(typeid(obj) == "Conf") { Conf* sel = dynamic_cast< Conf* >(obj); if(sel){ sel->Info(); } } if(typeid(obj) == "Time") { Time* sel = dynamic_cast< Time* >(obj); sel->Info(); if(sel){ sel->Info(); } } if(typeid(obj) == "App") { App* sel = dynamic_cast< App* >(obj); sel->Info(); if(sel){ sel->Info(); } } } } |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
devi sostituire
Codice:
typeid(sel) Codice:
typeid(sel).name() Per farlo funzionare puoi fare qualcosa del genere: Codice:
if ( typeid(sel) == typeid( Conf* ) ) { ... } Piuttosto cerca di sfruttare il polimorfismo degli oggetti, ridefinendo per ogni sottoclasse un metodo che faccia delle cose differenti. |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ma infatti tutte le funz Info() sono overridding della Info() di Object che è virtual.
Ma io voglio che ParseInfo() scielga in base a quello che gli passo l'Info() da sciegliere ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora non serve...basta usare un puntatore all'oggetto base e fare: pun->info(); ed automaticamente verrà scelta la info() giusta... Altrimenti a cosa serve la derivazione ?!??!?
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
![]() |
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Codice:
/** * <b>Virtuale:</b> no * <b>Funzione:</b> Parserizza le informazioni * <b>Argomenti:</b> constante a Object * <b>Return:</b> - * <b>Eccezioni:</b> - */ void Object::ParseInfo(const Object *obj) { *obj->Info(); } Quote:
|
|
![]() |
![]() |
![]() |
#7 | |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Da qualche parte avrai scritto qualcosa come Codice:
class Object { /* ... /* void Info(); /*...*/ }; Codice:
void Info() const; |
|
![]() |
![]() |
![]() |
#8 |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
occhio che hai fatto un altro errore:
Codice:
*obj->Info(); |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Inoltre se usi il derefernce (l'asterisco) allora non devi usare ->...
Quindi: (*obj).Info(); ovvero obj->Info(); |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:58.