一个简易的类型判别器 XOPiwrg%p )W!\D/C+ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
~Da-|FKa> QT[4\) 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
G$6mtw6[M 代码: 全选/*
u'Z^|IVfo * File: TypeUtils.h
]oyWJ#8 * Author: kwarph [
kwarph@gmail.com ]
>$;,1N $bd * Time: 2009-3-21 下午03:25:02
BYb"[qPV *
J''lOj(@ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
\NQ[w7 */
Poxoc-s E&> 2=$~ #ifndef TYPEUTILS_H_
<l$ vnq #define TYPEUTILS_H_
co>IJzg (iY2d_FQ[ template<typename T>
256V
xn struct InstanceOf {
QTjnXg?Ri U]O>DM^' template<typename T1>
rh6 e static bool test(const T1*& ptr) {
X6n8Bi9Ik const T* t = dynamic_cast<const T*> (ptr);
L#`X;: return t != 0;
,o [FUi(#@ }
D1Q]Z63, ]|B_3*A template<typename T1>
p}|<EL}Z9 static bool test(T1*& ptr) {
H.)J?3 T* t = dynamic_cast<T*> (ptr);
G PL^!_ return t != 0;
^6PKSEba }
->J5|c# *!`bC@E template<typename T1>
y+$a}=cb0 static const T* get(const T1*& ptr) {
@4P_Yfn const T* t = dynamic_cast<const T*> (ptr);
+D M,+{} return t;
%=i/MFGX }
YG6Y5j[-X~ j`_tb
template<typename T1>
<E7y:%L[Go static T*& get(T1*& ptr) {
~!'T!g%C return dynamic_cast<T*> (ptr);
jN!sLW }
``Rg0o };
^2"w5F %Wt F\p #endif /* TYPEUTILS_H_ */
x=V3_HI/} >*]B4Q Q Q: 570508473
P$"s*otr 邮 件:
athzhang@gmail.com &IkHP/ 电 话:(0512) 55253348,(0) 18912671348
.Iv`B:4 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
$QaEU="Z