一个简易的类型判别器 'q_ Z
dw% _9H]:]1QH 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
at{p4Sl q
}>3NCh 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
nM:<l}~v{ 代码: 全选/*
U`8Er48X * File: TypeUtils.h
WagL8BpLx * Author: kwarph [
kwarph@gmail.com ]
XP0;Q;WF} * Time: 2009-3-21 下午03:25:02
rQGInzYp *
KK1?!7 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
!Q_Wbu\U */
G`jvy@ b_6cK# #ifndef TYPEUTILS_H_
K]Vp! G #define TYPEUTILS_H_
)=X g W)J5[p? template<typename T>
P0(LdZH6u struct InstanceOf {
@1&"S7@}u tU2#Z=a template<typename T1>
'J-a2oiM( static bool test(const T1*& ptr) {
#NGtba const T* t = dynamic_cast<const T*> (ptr);
7&wxnxSk^ return t != 0;
WcS`T?Xa }
)8rF'pxI o _l_Yi template<typename T1>
3 yb]d5:U static bool test(T1*& ptr) {
ZzTkEz > T* t = dynamic_cast<T*> (ptr);
zh0T3U0D return t != 0;
>o{JG(Rn }
F[%k;aJ \P9ms?((A template<typename T1>
`''y,{Fs static const T* get(const T1*& ptr) {
}uC]o@/ const T* t = dynamic_cast<const T*> (ptr);
3.hFYA w return t;
Ayg^<)JWh }
SCe$v76p# r-xP6 template<typename T1>
WQ8 "Jj?k6 static T*& get(T1*& ptr) {
@x}^2FE return dynamic_cast<T*> (ptr);
G~bDl:k`A }
nw+^@|4 };
C96*,.j~' p=A,yGDV #endif /* TYPEUTILS_H_ */
r-!Qw1 ^2 H-_ Q Q: 570508473
#.*w) 邮 件:
athzhang@gmail.com sR83e|4I 电 话:(0512) 55253348,(0) 18912671348
=Hn--DEMg 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
/3^XJb$Sa