一个简易的类型判别器 ?mRGFS Qel2OI `b 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
YH
5jvvOI cKb jW 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
X/8CvY#n 代码: 全选/*
oQ=v:P] * File: TypeUtils.h
_$oN"pj * Author: kwarph [
kwarph@gmail.com ]
l4:5(1 * Time: 2009-3-21 下午03:25:02
v*&WxP^Gm *
VXM5
B * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
Uh9p,AV */
tE~OWjL 9MI~yIt`L #ifndef TYPEUTILS_H_
4=T.rVS[ #define TYPEUTILS_H_
^>3q@,C]c ^5:xSQ@: template<typename T>
2Gw2k8g& struct InstanceOf {
@`,~d{ziF zFn!>Tqe template<typename T1>
5Q9nJC{'NN static bool test(const T1*& ptr) {
Tf|?j=f const T* t = dynamic_cast<const T*> (ptr);
_~=qByD
return t != 0;
!(-lY(x }
gYtv`O lhN2xg5x template<typename T1>
{Y\W&Edw% static bool test(T1*& ptr) {
H2p lT T* t = dynamic_cast<T*> (ptr);
d;<gwCc return t != 0;
gE_i#=bw }
T=NF5kj-= </.9QV template<typename T1>
g"F&~y/p static const T* get(const T1*& ptr) {
+kMVl_`V const T* t = dynamic_cast<const T*> (ptr);
!b=jD;< return t;
~o+:M0)} }
jgz} Zs$Qo->F template<typename T1>
x+=Ko static T*& get(T1*& ptr) {
\E!a=cL! return dynamic_cast<T*> (ptr);
9ozK}Cg4 }
4=Wtv/
3 };
]WO0v`xh ,bLHkBK #endif /* TYPEUTILS_H_ */
" 0:&x
n8L n B5 :X Q Q: 570508473
b%TS37`^[ 邮 件:
athzhang@gmail.com YM:;mX5B 电 话:(0512) 55253348,(0) 18912671348
MHm=X8eg 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
x$6`k