一个简易的类型判别器 Lr`yl$6 C[75!F 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
7XaRi@uG N)QW$iw9 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
@sP?@<C 代码: 全选/*
WkT4&|POJ * File: TypeUtils.h
;e+ErN`a.~ * Author: kwarph [
kwarph@gmail.com ]
4XRVluD%W. * Time: 2009-3-21 下午03:25:02
a$ Z06j *
=cxjb,r * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
SJ<nAX */
0L'h5i>H) oYW:ptJ #ifndef TYPEUTILS_H_
HJDM\j*5 #define TYPEUTILS_H_
)gZ yW
WHL@]^E@m template<typename T>
qTG/7tn
" struct InstanceOf {
\j4TDCs_[ &U:;jlST9 template<typename T1>
$aEL>,X static bool test(const T1*& ptr) {
\]zHM.E1 const T* t = dynamic_cast<const T*> (ptr);
u-D%: lz85 return t != 0;
Ay[6rUO }
8/k*"^3 F8q|$[nH template<typename T1>
^5OR%N) static bool test(T1*& ptr) {
HN\9d T* t = dynamic_cast<T*> (ptr);
0y*8;7-|r) return t != 0;
Uo# Pe@ieQ }
W 5-=,t EsdA%` template<typename T1>
d4~!d>{n|c static const T* get(const T1*& ptr) {
ZjWI~"] const T* t = dynamic_cast<const T*> (ptr);
/>H9T[3= return t;
#}o*1 }
}5`Kn}rY L^dF
)y? template<typename T1>
Y-v6xUc{F static T*& get(T1*& ptr) {
(m13
ong return dynamic_cast<T*> (ptr);
`j9 ;9^ }
A2..gs/ };
dj 4:r!5_ af)L+%Q%R #endif /* TYPEUTILS_H_ */
Pa+%H]vB l4RZ!K*X_" Q Q: 570508473
cJMp`DQzc 邮 件:
athzhang@gmail.com w~Aw?75t 电 话:(0512) 55253348,(0) 18912671348
05Ak[OOU> 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
S3$&}I <