2011-08-22 29 views
9

Derleme zamanında türetilmiş türüne göre bir sınıf için bir karma oluşturmak istiyorum. Bugün hoşuna oluşturmak: (oldukça gereksiz yere) çalıştırınDerleme zamanında C++ türü kimliği

template<class Type> 
class TypeBase 
{ 
public: 
    static const unsigned s_kID; 
}; 

template<class Type> 
const unsigned TypeBase<Type>::s_kID = hash(typeid(Type)); 

ama bu üretir zaman başlatma kodu

(hash (..) işlevi std :: Type_info :: adı() dayalı basit karma yapar)

Fikirler?

+0

Karmaşık çarpışma riskiniz yok mu, belki de sorun değil? –

+0

@Andreas: Karmaları oluştururken, karma girişleri olan bir haritanım da var. Böylece çarpışma olup olmadığını kontrol edebilirim. Bunun yanı sıra, derslerin sayısı belki 20, bu yüzden ben de onunla güvende olurum. – Robert

+0

Sadece id = ++ someGlobalCounter' gibi bir şey yapamazdınız mı? (Bunun önemli olduğunu biliyorum, sadece kritik değil kritik) –

cevap

3

Süreç başlangıcında gerçekleşen diğer her şey ve mevcut kodun ne kadar basit ve zarif olduğu göz önüne alındığında, bir gazilyon türüne sahip olmadığınızı varsayarak, mevcut çözümünüzü olduğu gibi bırakacağım.

+0

Teşekkürler. Prematüre optimizasyon durumu, ha? ;) – Robert

+0

Gerçekten. Uygulamanın başlangıçta 150 mikrosaniye uzun sürdüğü için şikayet eden kullanıcılar gibi herhangi bir çalışma zamanı etkiniz olmadığı sürece, olduğu gibi bırakın. Ve bu değişkenin işaretçisini imzasız olarak yapmak için bir sihir yapmaya çalışmayın, çünkü bu taşınabilir olmayacaktır. – PlasmaHH

+0

@robert evet, bana öyle geliyor. –

İlgili konular