Voglio generare un hash per una classe basata sul suo tipo derivato in fase di compilazione. Oggi ho generare le cose come:ID tipo C++ al momento della compilazione
template<class Type>
class TypeBase
{
public:
static const unsigned s_kID;
};
template<class Type>
const unsigned TypeBase<Type>::s_kID = hash(typeid(Type));
ma questo genera (abbastanza inutilmente) tempo di esecuzione codice di inizializzazione (la funzione di hash (..) fa un hash semplice sulla base di std :: :: type_info nome())
Idee?
Non c'è il rischio che si ottengano collisioni da hash o forse non è un problema? –
@Andreas: quando creo gli hash, ho anche una mappa con le voci di hash. Quindi posso controllare se ci sono collisioni. Oltre a questo, il numero di classi è forse di 20, quindi credo di essere al sicuro anche con quello. – Robert
Non potresti semplicemente fare qualcosa come 'id = ++ someGlobalCounter'? (Mi rendo conto che questo non è un aspetto critico, solo curioso) –