C ++: usando TypeID nel codice di produzione
Domanda
È generalmente considerato una cattiva pratica da usare typeid
nel codice di produzione? Inoltre, ho notato typeid
ritorna type_info
, che include alcuni metadati (come una stringa con il nome del tipo); C'è un modo per disattivarlo?
Soluzione
È difficile dire se l'uso di una particolare funzione linguistica è "cattivo" o "buono". Dipende davvero da come lo usi. Non c'è niente di intrinsecamente sbagliato nell'uso typeid
Se è lo strumento giusto per il lavoro, ma se c'è una soluzione migliore a qualsiasi problema tu stia risolvendo, allora dovresti evitare di usare typeid
a favore di quella soluzione migliore.
Spesso non è una buona idea da usare typeid
Perché il suo uso può spesso essere evitato usando ereditarietà e funzioni virtuali. Se riesci ad aggiornare il tuo sistema in questo modo, potrebbe essere una buona idea farlo.
Per quanto riguarda se puoi avere typeid
Evita di restituire un std::type_info
, questo non dovrebbe causare problemi di prestazione. typeid
valuta a a const std::type_info&
, quindi non ha una copia profonda nessuna delle informazioni di stringa che contiene. La maggior parte delle implementazioni ha l'attuale std::type_info
Oggetto memorizzato nella tabella delle funzioni virtuali dell'oggetto, quindi nessuna copia viene eseguita internamente.
Altri suggerimenti
- Dipende da cosa stai facendo con il typeid. Se stai usando dove dovresti usare il polimorfismo, ovviamente è un male. Tuttavia, scaricare tracce o cose del genere per il debug sulle macchine dei clienti va bene.
- L'unico modo è disabilitare RTTI sul compilatore. Non esiste un modo standard di farlo. Nota questo si disabiliterà anche
dynamic_cast
.