一个简易的类型判别器 [& hdyLt N*o+m~:y 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
v8wN2[fC d5WE^H)E. 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
I#9K/[ 代码: 全选/*
=#>P! * File: TypeUtils.h
qLPI^g, * Author: kwarph [
kwarph@gmail.com ]
} 10Dvt>+ * Time: 2009-3-21 下午03:25:02
wePMBL1P* *
w|$;$a7) * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
JXvHsCd? */
&=s{ +0 r%xNfTa #ifndef TYPEUTILS_H_
dn`#N^Od #define TYPEUTILS_H_
(T`x-wTl k"L_0HK template<typename T>
SZyPl9.b struct InstanceOf {
a_Xh(d$ d5u,x.R template<typename T1>
12k)Ek9 static bool test(const T1*& ptr) {
-pLb%f0? const T* t = dynamic_cast<const T*> (ptr);
9K%E+_7b return t != 0;
P3N
f< }
n){\KIU/O &,K;F' template<typename T1>
!X#=Pt[, static bool test(T1*& ptr) {
OO\UF6MCU T* t = dynamic_cast<T*> (ptr);
w#"c5w~ return t != 0;
[%3{mAd }
'rd{fe_g! i2swots template<typename T1>
h3JIiwv0! static const T* get(const T1*& ptr) {
r2H]n.MT const T* t = dynamic_cast<const T*> (ptr);
*Jp>)> return t;
u#}zNz#C5 }
2>s:wABb / Ou,B3kuQ+ template<typename T1>
&Cdd static T*& get(T1*& ptr) {
67f#Z&r2k return dynamic_cast<T*> (ptr);
Ho\z^w+T` }
v'Lckw@G4 };
f5`exfdHE s<^UAdLnl #endif /* TYPEUTILS_H_ */
7]
~'8 B%r)~?6DM Q Q: 570508473
LR`/pet 邮 件:
athzhang@gmail.com aP4r6lLv+ 电 话:(0512) 55253348,(0) 18912671348
N(F9vZOs 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
VpJ2Qpd=