一个简易的类型判别器 ,64-1! AbW6x 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
+R75v ) )NT*bLRPQ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
(A.C]hD 代码: 全选/*
1s;Saq+ * File: TypeUtils.h
&=mtc%mL * Author: kwarph [
kwarph@gmail.com ]
6j|{`Zd)G * Time: 2009-3-21 下午03:25:02
j3ls3H& *
0jWVp-y * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
4E}Yt$| */
-m#)B~) SUK?z!f<i #ifndef TYPEUTILS_H_
lPAQ3t!, #define TYPEUTILS_H_
SSzIih@u ,|/f`Pl template<typename T>
X2'0PXv>! struct InstanceOf {
%iqD5x$OA Q22 GIr template<typename T1>
+&H4m=D-#a static bool test(const T1*& ptr) {
E' uZA const T* t = dynamic_cast<const T*> (ptr);
;}p return t != 0;
kD"{g#c }
NvX[zqNP_R E _|<jy$` template<typename T1>
)D%~`,#pQ static bool test(T1*& ptr) {
@IZnFHN T* t = dynamic_cast<T*> (ptr);
~pky@O#b return t != 0;
)fAUum }
l9"s>P U ql~J8G9 template<typename T1>
%J-GKpo/S static const T* get(const T1*& ptr) {
>y+B const T* t = dynamic_cast<const T*> (ptr);
`\ol,B_l return t;
i,VMd }
O^rD HFj, b|(:[nB template<typename T1>
|JsZJ9W+J static T*& get(T1*& ptr) {
_,*r_D61S return dynamic_cast<T*> (ptr);
KqP#6^ _ }
)=(kBWM };
M869MDo *qpSXmOz #endif /* TYPEUTILS_H_ */
M )(DZ} oxtay7fx Q Q: 570508473
LFV%&y|L 邮 件:
athzhang@gmail.com _)iCa3z 电 话:(0512) 55253348,(0) 18912671348
/BL4<T f 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
yaX
iE_.