2011-08-22 76 views
9

我想在编译时根据派生类型为类生成一个哈希。今天我产生它想:编译时的C++类型ID

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

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

但这种生成(相当不必要的)运行时初始化代码(哈希(..)函数基础上的std :: TYPE_INFO ::名称()一个简单的哈希)

想法?

+0

是否存在散列碰撞的风险,或者这不成问题? –

+0

@Andreas:创建哈希时,我也有一个包含哈希条目的地图。因此我可以检查是否有碰撞。除此之外,班级的数量可能是20人,所以我想我也很安全。 – Robert

+0

难道你不能只是做'id = ++ someGlobalCounter'吗? (我知道这是不是petformance关键,只是好奇) –

回答

3

鉴于其他一切发生在进程启动,以及如何简单而优雅的现有代码,假设你不凑一个极大的类型,我会离开你现有的解决方案,正是因为它是。

+0

谢谢。过早优化的案例,呃? ;) – Robert

+0

确实。只要您没有任何运行时影响,例如抱怨应用程序的启动时间超过150微秒的用户,请保持原样。并且不要试图将该变量的指针转换为无符号的任何魔法,因为这不会是可移植的。 – PlasmaHH

+0

@robert是的,在我看来是这样的。 –