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?

È stato utile?

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

  1. 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.
  2. L'unico modo è disabilitare RTTI sul compilatore. Non esiste un modo standard di farlo. Nota questo si disabiliterà anche dynamic_cast.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top