一个简易的类型判别器 )v0m7Lv#/ &ATjDbW*( 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
*8X: fq *gVRMSrx4 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
*hFT,1WE=+ 代码: 全选/*
AR/`]"' * File: TypeUtils.h
YujhpJ< * Author: kwarph [
kwarph@gmail.com ]
M6y:ze * Time: 2009-3-21 下午03:25:02
!3?HpR/nV *
R &T(S * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
611:eLyy&l */
TpZ)v.w~l7 "mHSbG #ifndef TYPEUTILS_H_
s.Yyw y #define TYPEUTILS_H_
U*[/F)! 8 :Z3Q template<typename T>
NWv1g{M struct InstanceOf {
S%g`X ^EM##Ss_ template<typename T1>
;`s/|v static bool test(const T1*& ptr) {
A4 o'EQ?~ const T* t = dynamic_cast<const T*> (ptr);
ks
3<zW( return t != 0;
zcP_-q]1 }
$6BXoh! M(I 2M template<typename T1>
ewY+a ,t static bool test(T1*& ptr) {
o}Dy\UfU T* t = dynamic_cast<T*> (ptr);
C+*: lLY return t != 0;
%k5^n0|* }
mqw&SxU9 ] 6M- s template<typename T1>
|BF4F5wC? static const T* get(const T1*& ptr) {
A;q}SO%b const T* t = dynamic_cast<const T*> (ptr);
T+N%KRl return t;
qZCA16 }
/<
h~d 4~DFtWbf template<typename T1>
/&cb`^"U^ static T*& get(T1*& ptr) {
?_}[@x return dynamic_cast<T*> (ptr);
N1+%[Uh9) }
%0$$tS + };
cZ%weQa#N) %R-"5?eTtu #endif /* TYPEUTILS_H_ */
r;I3N+ $Rd74;edn Q Q: 570508473
yG2j!D 邮 件:
athzhang@gmail.com [|Jzs[ 电 话:(0512) 55253348,(0) 18912671348
F{ B__Kf 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
50uNgLs