一个简易的类型判别器 ^MG"n7)X Yb1Q6[! 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
)t CNp g${k8.TV 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
k+Z2)j" 代码: 全选/*
[khXAf1{Q * File: TypeUtils.h
zJ@^Bw;A^@ * Author: kwarph [
kwarph@gmail.com ]
ntW1 )H'o * Time: 2009-3-21 下午03:25:02
S,Tc\} *
Aq\K N. * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
[ugr<[6 */
MV07RjeS G&"O)$h #ifndef TYPEUTILS_H_
t+{vbS0 #define TYPEUTILS_H_
'|<S`,'#hg &:1q3gDm template<typename T>
\xQu*M:! struct InstanceOf {
7:<A_OLi +oL@pp0 template<typename T1>
\1QY=} static bool test(const T1*& ptr) {
G.PRPl const T* t = dynamic_cast<const T*> (ptr);
'K#ndCGJ$ return t != 0;
IIAmx[ b }
f[ia0w5 m 4yjIR? template<typename T1>
\k^ojz J static bool test(T1*& ptr) {
mkl^2V13~ T* t = dynamic_cast<T*> (ptr);
1I)oT-~ return t != 0;
C2\zbC[qm }
A~ _2" NB+/S ;` template<typename T1>
m(0X_&&?z static const T* get(const T1*& ptr) {
!Lw]aHb const T* t = dynamic_cast<const T*> (ptr);
7!\zo mx return t;
|=MhI5gsx }
vo%"(! IDL0!cF template<typename T1>
ml /S|`Drk static T*& get(T1*& ptr) {
7R# }AQ return dynamic_cast<T*> (ptr);
HxcL3Bh$~} }
M>}_2G]#F };
m;t&P58f Y*S:/b~y #endif /* TYPEUTILS_H_ */
)4m`Ya,E3 d`=LZio Q Q: 570508473
BRM!g9 邮 件:
athzhang@gmail.com W|y;Kxy 电 话:(0512) 55253348,(0) 18912671348
5pK
_-:? 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
0G0(g,3p