一个简易的类型判别器 n?vrsqmZ nE)?P*$3 Z 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
D]resk 5=/H2T!F 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
i[A$K~f 代码: 全选/*
aLTC#c%U * File: TypeUtils.h
W>036 * Author: kwarph [
kwarph@gmail.com ]
c*ac9Y'o * Time: 2009-3-21 下午03:25:02
mjG-A8y *
* 3mF.^ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
)2C`;\/: */
/,A:HM>B %gDMz7$~ #ifndef TYPEUTILS_H_
($&i\e31N #define TYPEUTILS_H_
BKe~y &^^zm9{ template<typename T>
0m_c43+^ struct InstanceOf {
2:^Dv1J)rD K"-.K]O8E% template<typename T1>
<zH24[ static bool test(const T1*& ptr) {
fQq'_q5 const T* t = dynamic_cast<const T*> (ptr);
?"[b408- return t != 0;
P#bZtWx'<N }
dX-Xzg 82Dw,Cn template<typename T1>
%JmSCjt`G static bool test(T1*& ptr) {
z/aZD\[_ T* t = dynamic_cast<T*> (ptr);
!_)*L+7f_ return t != 0;
n#,|C`2r }
1foy.3g- .<j\"X( template<typename T1>
x\!Q[ static const T* get(const T1*& ptr) {
b&X- &F const T* t = dynamic_cast<const T*> (ptr);
>8+:{NW return t;
}2;~':Mklz }
J@w Q3#5a eS9uKb5n( template<typename T1>
` WIv|S static T*& get(T1*& ptr) {
}8Tr M0q8 return dynamic_cast<T*> (ptr);
]Ec\!,54u }
wB}s>o\ };
]Sg4>tp 8C3oj #endif /* TYPEUTILS_H_ */
+gh6eY8 9mfqr$3 Q Q: 570508473
E'zLgU)r` 邮 件:
athzhang@gmail.com {(#Dou 电 话:(0512) 55253348,(0) 18912671348
:hB/|H*= 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
~#+ Hhc(