一个简易的类型判别器 i=_leC)rl               l^xkXj                          在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用 
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
 V5rnI\:7   ^7q=E@[e  下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
 !mBsDn(J  代码: 全选/*
 X[k-J\   * File: TypeUtils.h
 A(_AOoA'   * Author: kwarph [ 
kwarph@gmail.com ]
 B%6bk.   * Time: 2009-3-21 下午03:25:02
 L5T)_iQ5   *
 ^
vI|   * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
 R+]p
-NI^   */
 ,r5<v_   D{o1G?A  #ifndef TYPEUTILS_H_
 yP0P-8  #define TYPEUTILS_H_
 iM2
EEC   fEs957$  template<typename T>
 MSeO#X  struct InstanceOf {
 wI>JOV7   L:YsAv      template<typename T1>
 1hZM))      static bool test(const T1*& ptr) {
 y:4Sw#M%(          const T* t = dynamic_cast<const T*> (ptr);
 ;0E"4(S.q1          return t != 0;
 j-gLX      }
 =khjD[muC   	\$;\,p p      template<typename T1>
 P@9>4}r$      static bool test(T1*& ptr) {
 ,<hXNN          T* t = dynamic_cast<T*> (ptr);
 ulfpop*2          return t != 0;
 .u7d      }
 S
!c/"~X+   d!8q+FI       template<typename T1>
 ]+0-$t7Y      static const T* get(const T1*& ptr) {
 m?<8 ':	          const T* t = dynamic_cast<const T*> (ptr);
 R
$'}Z          return t;
 ?y<n^`      }
 XeDU 
,   3+A 0O%0*      template<typename T1>
 t)XV'J      static T*& get(T1*& ptr) {
 hD<z^j+           return dynamic_cast<T*> (ptr);
 ?d+B]VYw      }
 ;YZw{|gsh  };
 };o R x)   zQ{	Q>"-  #endif /* TYPEUTILS_H_ */            
 ?]fBds=   7P/j\frW  Q  Q: 570508473 
 IX7d[nm39  邮  件:
athzhang@gmail.com v{
C]\8  电  话:(0512) 55253348,(0) 18912671348
 QN_5q5  地  址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
 8e>;E