1.RTTI的实现
??如何获取一个类型T的name或者唯一ID,对于这个问题,最常规的方式应该是借助C++的rtti了,比如如ponder中所使用的方式/p>
namespaceponder{namespacedetail{typedefstd::type_indexTypeId;//Usedtouniquelyidentifyatype.//CalculateTypeIdforTtemplatetypenameTinlineTypeIdcalcTypeId(){returnTypeId(typeid(T));}}}
??其中的TypeID其实就是std::type_index,ponder中大量依赖这种方式进行T-std::type_index的转换,作为常规实现,它具有以下特点/p>
它确实能够比较好的生成一个自带hash实现的std::type_index,可以很好的用它作为key来索引类型相关的对象.
利用相同的方法也可以很容易的获取类型T的字符串名称.
在rtti开启的情况下,功能直接可获取.
??但不难发现,这种方法也存在以下问题/p>
首先是依赖rtti,在一些rtti关闭的情况下,对应机制就停摆了
很重要的一点,这是一个runtime实现,也就是说,天生与constexpr无缘,我们没有办法做任何善于