一个简易的类型判别器
'[#uf/~W $mOK|=tI_ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
SwuadN ;"nEEe]? 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
HnqZ7%jeN 代码: 全选/*
U-s6h;^O * File: TypeUtils.h
3^us;aOr * Author: kwarph [
kwarph@gmail.com ]
qO9_e * Time: 2009-3-21 下午03:25:02
<`9:hPp0 *
)V}u1C-N * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
#UJ@P Dwil */
Ve8`5
[P{Xg:0 #ifndef TYPEUTILS_H_
4"j5@bppJ #define TYPEUTILS_H_
. yu LVLh&9 template<typename T>
j{P,(- struct InstanceOf {
:7!/FBd 8LwbOR" template<typename T1>
9H3#8T] ; static bool test(const T1*& ptr) {
sEvJ!$Tt?I const T* t = dynamic_cast<const T*> (ptr);
}%R6Su]y return t != 0;
xt"/e-h} }
^j=_=Km] }wkBa] template<typename T1>
5>w>J static bool test(T1*& ptr) {
%r! T* t = dynamic_cast<T*> (ptr);
W^+bgg<. return t != 0;
"5jZS6A] }
sinG $= nhCB])u8l template<typename T1>
}u+R,@l/ static const T* get(const T1*& ptr) {
e:V,>RbC0s const T* t = dynamic_cast<const T*> (ptr);
]@?3,N return t;
tXKhkt` }
y9)l,@D Qw5M\
template<typename T1>
C.(ZXU7 static T*& get(T1*& ptr) {
` ?6m0|\@ return dynamic_cast<T*> (ptr);
L6A6|+H%E }
sq)Nn&5A };
sX_ ^H%fd !P92e1 #endif /* TYPEUTILS_H_ */
Cm;N5i iy: ;g Q Q: 570508473
Y9w=[[1 邮 件:
athzhang@gmail.com m&A/IW,. 电 话:(0512) 55253348,(0) 18912671348
|k+&weuY 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
T8hQ< \g