一个简易的类型判别器 oo;<I_#07 EHq;eF 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
)A*53>JV W#U|;@" 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
9]+zZP_# 代码: 全选/*
lwfS$7^P * File: TypeUtils.h
T(u;<}e@[ * Author: kwarph [
kwarph@gmail.com ]
+JYb)rn$^ * Time: 2009-3-21 下午03:25:02
tRI<K *
"y~*1kBu * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
q`mxN!1[ */
2'=)ese eV!(a8 #ifndef TYPEUTILS_H_
MH)V=xU|) #define TYPEUTILS_H_
Fy\q>(v. n@tt.n!{l template<typename T>
vWmp?m struct InstanceOf {
tW~kn9glZ +pgHCzwJE template<typename T1>
#C }+ static bool test(const T1*& ptr) {
I)yaR+l const T* t = dynamic_cast<const T*> (ptr);
}O+xs3Uv return t != 0;
'AK '(cZ }
I`oJOLV d1_kw
A2y template<typename T1>
(hOD static bool test(T1*& ptr) {
.aO6Y+Y T* t = dynamic_cast<T*> (ptr);
yKUxjb^b\ return t != 0;
4G:~|N.{p }
[*O>Lk 5|0/$ SWd* template<typename T1>
6p
}a! static const T* get(const T1*& ptr) {
+x{o const T* t = dynamic_cast<const T*> (ptr);
>}f!. i return t;
o]tfvGvU* }
W8QP6^lY R\ 8[6H template<typename T1>
EGI$=Y static T*& get(T1*& ptr) {
_R(ZvsOZ return dynamic_cast<T*> (ptr);
.lj5pmD }
:vIJ>6lIR };
nHeJ20 xO:h[ #endif /* TYPEUTILS_H_ */
?8kFAf~ XK\nOHLS Q Q: 570508473
!pU^?Hy= 邮 件:
athzhang@gmail.com l[_antokn 电 话:(0512) 55253348,(0) 18912671348
F|6"-*[RS 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
!G vT{