一个简易的类型判别器 I%(+tJ               b"zq3$6*                          在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用 
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
 Xr~r`bR=   #
I<G:)  下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
 gz88$BT  代码: 全选/*
 I|PiZ1]2Y   * File: TypeUtils.h
 #F9$"L1Hg   * Author: kwarph [ 
kwarph@gmail.com ]
 xL!05du
   * Time: 2009-3-21 下午03:25:02
  "RG.vo7b   *
 0\mM^+fO   * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
 ~pw_*AN   */
 )Q\;N	C=4   <h;P<4JX  #ifndef TYPEUTILS_H_
 Lr+2L_/v`  #define TYPEUTILS_H_
 JhD8.@}	b~   &?9.Y,  template<typename T>
 ZWr\v!4  struct InstanceOf {
 cg$~.ytPK   )GR^V=o7,Y      template<typename T1>
 /TB_4{      static bool test(const T1*& ptr) {
 PEBQ|k8g&          const T* t = dynamic_cast<const T*> (ptr);
 ^	]B&7\w"t          return t != 0;
 a $KM
 q>      }
 
t,H,*2   g$:2c7uL      template<typename T1>
 3O] e      static bool test(T1*& ptr) {
 qS7*.E~j|]          T* t = dynamic_cast<T*> (ptr);
 [2
Rp.?          return t != 0;
 |M0TG       }
 wF&\@H   6qw_ |A&g      template<typename T1>
 m	t*v@'l.      static const T* get(const T1*& ptr) {
 ~#-`Qh          const T* t = dynamic_cast<const T*> (ptr);
 ?+TD2~rD(          return t;
 )pzXC      }
 %+'&$   ~PV>3c3l=      template<typename T1>
 AUN	Tc3      static T*& get(T1*& ptr) {
 hR?rZUl2M          return dynamic_cast<T*> (ptr);
 Y	/wvn8~C      }
 [s2%t"H-y  };
 /wK7l-S   9\"~ G)  #endif /* TYPEUTILS_H_ */            
 :b
;5O3:B   }KOu  Q  Q: 570508473 
 E	O}(MXS  邮  件:
athzhang@gmail.com 85X^T]zo  电  话:(0512) 55253348,(0) 18912671348
 w}E?FEe.  地  址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
 $4?%Z>'