一个简易的类型判别器 h~wi6^{&Y yUPIY:0 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Y?534l)j Mc!Xf[ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
)#F]G$51r 代码: 全选/*
q64k7<C, * File: TypeUtils.h
-l}IZY * Author: kwarph [
kwarph@gmail.com ]
[=%TnT+^9 * Time: 2009-3-21 下午03:25:02
_20#2i& *
i_][PTH * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
,YhdY6 */
={?vAb: H:H6b #ifndef TYPEUTILS_H_
q$G,KRy/ #define TYPEUTILS_H_
~8aJ S,u X0*QV- RN template<typename T>
0j(M*
sl struct InstanceOf {
<5=JE*s$NS /*Qq[C template<typename T1>
XlI!{qj| static bool test(const T1*& ptr) {
R}mn*h6 const T* t = dynamic_cast<const T*> (ptr);
@E.k/G!~Nb return t != 0;
s_.]4bl.8 }
"7>>I D f&D]anf33 template<typename T1>
8}w6z7e|{ static bool test(T1*& ptr) {
>yJ9U,Y T* t = dynamic_cast<T*> (ptr);
dz>;<&2Z return t != 0;
a}Sd W }
PA w-6; _7DkS}NJs template<typename T1>
CQ;]J=|<_ static const T* get(const T1*& ptr) {
A8A~!2V const T* t = dynamic_cast<const T*> (ptr);
oUQ07z\C return t;
#"fJa:IYG7 }
{G*A.$-d ceGa([#!\_ template<typename T1>
e4FM} z[ static T*& get(T1*& ptr) {
1y^K/.5- return dynamic_cast<T*> (ptr);
#y|V|nd }
?[x49Ux,P };
{K#NB_*To ~el3I=KC} #endif /* TYPEUTILS_H_ */
$hxNhI >!6i3E^ Q Q: 570508473
)EyI0R] 5 邮 件:
athzhang@gmail.com +jC*'7p@ 电 话:(0512) 55253348,(0) 18912671348
OdI\B 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
Hx$c
N