Ho trovato una soluzione semplice da qualche parte su Internet a una classe di identità senza C + + RTTI incorporato.Identità di classe senza RTTI
template <typename T>
class Identity {
public:
static int64_t id()
{
static int64_t dummy;
return reinterpret_cast<int64_t>(&dummy);
}
};
Quando abbiamo bisogno di un po 'di ID di classe, usiamo:
Identity<OurClass>::id();
mi chiedo, ci sono collisioni? Può restituire lo stesso ID per le diverse classi o il diverso ID per le stesse classi? Ho provato questo codice con g ++ con diversi valori di ottimizzazione, tutto sembra ok.
In linea di principio, sì. Non c'è alcuna garanzia che un puntatore a funzione abbia le stesse dimensioni di un 'int'. –
Questo è rilevante per i miei interessi ... –
Per evitare il problema precedente, sarebbe meglio inserire una variabile 'int' statica in quel template di funzione membro statico e restituire un puntatore a * that *. Il compilatore ottimizzerà comunque la funzione. – Electro