贝壳最近研究了下RTTI,发现几个有意思的事情。

dynamic_cast的应用。

dynamic_cast可以将一个指针的类型试图转换为指定的类型,是否能转换要看当前指针的动态类型是否是指定类型的子类,而不管指针的声明类型。当失败时返回NULL,因此可以用来识别一个指针的动态类型是否是某个类的子类。

typeid的应用。

typeid可以获得某个类的类型信息,最主要的就是name。指明了当前是哪个类,这在串行化中是必要的信息。当判断一个指针的动态类型是否就是某个类的时候可以这样typeid(*p)==typeid(class)。