一个简易的类型判别器 %d(= > /wt7KL-I 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
YhS_ ,3E CS(2bj^6D 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
32%Fdz1S 代码: 全选/*
;+6><O!G * File: TypeUtils.h
#d-zH:uq * Author: kwarph [
kwarph@gmail.com ]
!U1
vW}H * Time: 2009-3-21 下午03:25:02
>8=lX`9f{ *
^+CHp(X * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
@DY"~ccH */
nw%`CnzT f86Z #% #ifndef TYPEUTILS_H_
>][D" #define TYPEUTILS_H_
0< vJ*z|_ !Hl] & template<typename T>
l!&ik9m struct InstanceOf {
9!W$S[ABRB xy"'8uRi template<typename T1>
q#8yU\J|, static bool test(const T1*& ptr) {
2.b,8wT/ const T* t = dynamic_cast<const T*> (ptr);
PoPR34]^J return t != 0;
jlU6keZh` }
vB{iw}Hi! Fs%`W4/ template<typename T1>
.SER,],P static bool test(T1*& ptr) {
ljOY;WV3 T* t = dynamic_cast<T*> (ptr);
"`4ky] return t != 0;
mTxqcQc:7 }
N!3Tg564j $D !/v)3 template<typename T1>
2b^Fz0
w4 static const T* get(const T1*& ptr) {
[WG\wj. const T* t = dynamic_cast<const T*> (ptr);
*qk7e[IP return t;
m6n%?8t }
S)j(%g "#E<Leh' template<typename T1>
<<A#4!f static T*& get(T1*& ptr) {
n-l_PhPQ` return dynamic_cast<T*> (ptr);
CW?Z\ }
ftR& 5!Wm };
83t/\x,Q c3g`k"3*` #endif /* TYPEUTILS_H_ */
?Y,^Moc: %'2.9dB Q Q: 570508473
7H< IO` 邮 件:
athzhang@gmail.com Q!V:=d 电 话:(0512) 55253348,(0) 18912671348
S_Wq`I@b 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
1Z @sh>X|