一个简易的类型判别器 !t)uRJ H11@ DQ6 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
5M>SrZH oY\;KPz 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
-G1R><8[ 代码: 全选/*
(:+Wc^0 * File: TypeUtils.h
m*e8j[w# * Author: kwarph [
kwarph@gmail.com ]
qIy9{LF * Time: 2009-3-21 下午03:25:02
Vn^8nS *
O" [#g * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
.(Z^[C} */
bL:+(/: ldKLTO*& #ifndef TYPEUTILS_H_
B( wi+; #define TYPEUTILS_H_
]'#^ ~. 2C_I3S~U template<typename T>
d|
{<SRAI struct InstanceOf {
}6__E;h#J 6il+hz2&lH template<typename T1>
#LYx;[D6 static bool test(const T1*& ptr) {
i&}LuF8 const T* t = dynamic_cast<const T*> (ptr);
g1UQ6Oa return t != 0;
? a?]
LIE8 }
0KZsWlD:L s BuXwa template<typename T1>
z.t,qi$;{U static bool test(T1*& ptr) {
.p~.S&) T* t = dynamic_cast<T*> (ptr);
X-"0Zc return t != 0;
-zH-9N*c }
TU| 0I Pj^Ccd'>= template<typename T1>
>LU !Z static const T* get(const T1*& ptr) {
xLbF9ASim const T* t = dynamic_cast<const T*> (ptr);
CS xB)- return t;
MA mjoH }
1ww~!R &9n=!S'Md template<typename T1>
;[,#VtD static T*& get(T1*& ptr) {
2Aq+:ud)P return dynamic_cast<T*> (ptr);
!uKuO }
0NSCeq%;6q };
rsK
b9G lb)i0`AN+ #endif /* TYPEUTILS_H_ */
e A9r M: pAtxEaXh Q Q: 570508473
FxX nX 邮 件:
athzhang@gmail.com i?F~]8 电 话:(0512) 55253348,(0) 18912671348
mndNkK5o 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
,ce$y4%(