一个简易的类型判别器 u9~RD cc|"^-j-7 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
\y*,N^w u ukH?O)0O 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
*iW$>Yjb 代码: 全选/*
M!E#T-) * File: TypeUtils.h
|Je+y;P7 * Author: kwarph [
kwarph@gmail.com ]
M_monj}Z * Time: 2009-3-21 下午03:25:02
},'Ij;
%%Q *
sxBRg= * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
8OW504AD */
h1uD >heGl c$w} h[ #ifndef TYPEUTILS_H_
q7'[II; #define TYPEUTILS_H_
0Fi&7% D_MNF=7 template<typename T>
ok+-#~VTn struct InstanceOf {
avI fX 41o# template<typename T1>
x w%'R- static bool test(const T1*& ptr) {
%hqhi@q# const T* t = dynamic_cast<const T*> (ptr);
NA`EG,2 return t != 0;
68v59)0U }
1>1ii *;I F^u1 template<typename T1>
>RMp`HxDf static bool test(T1*& ptr) {
r31H Zx1^ T* t = dynamic_cast<T*> (ptr);
/ Dn return t != 0;
\jcEEIEi }
b2vc >X(,(mKi template<typename T1>
RZ:i60 static const T* get(const T1*& ptr) {
d{LQr}_o$$ const T* t = dynamic_cast<const T*> (ptr);
rH<iUiA?O return t;
$CYB&|d }
8(Y=MW;g m#oZu { template<typename T1>
I;!zZ.\ static T*& get(T1*& ptr) {
jt/
|u= return dynamic_cast<T*> (ptr);
RL;>1Q,H }
_Di}={1[. };
{lhdropd Q hHexr6 #endif /* TYPEUTILS_H_ */
;%R+]&J `Y`QxU!d% Q Q: 570508473
pd rF/U+ 邮 件:
athzhang@gmail.com A-dL_3 电 话:(0512) 55253348,(0) 18912671348
H#joc0?P 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
F
;m1I+;