一个简易的类型判别器 GZq~Pl r*F^8_YMK 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
/s~(? =qYH uUIjntSF( 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
/l%+l@ 代码: 全选/*
E[=#Rw!* * File: TypeUtils.h
/z)H7s+ * Author: kwarph [
kwarph@gmail.com ]
S\poa:D` * Time: 2009-3-21 下午03:25:02
<V
b
SEi *
<(E9U. * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
}+/F?_I=
% */
-J&
b~t@ qx'F9I #ifndef TYPEUTILS_H_
HKXtS>7d #define TYPEUTILS_H_
F?c:
).g h
7/wkv\y9 template<typename T>
[QZ8M@Gty# struct InstanceOf {
FgnS+c3W( i6-&$< template<typename T1>
Io*mFa? static bool test(const T1*& ptr) {
=XhxD<kI const T* t = dynamic_cast<const T*> (ptr);
D:56>%y@ return t != 0;
RD_l }
b~td^ Y$4dqn template<typename T1>
D/`b~Yl static bool test(T1*& ptr) {
.4%6_`E T* t = dynamic_cast<T*> (ptr);
Ir?ehA return t != 0;
+ab#2~,) }
m`!Vryf .t9*wz template<typename T1>
[ApAd static const T* get(const T1*& ptr) {
hmES@^n!_ const T* t = dynamic_cast<const T*> (ptr);
b/g~;| < return t;
8eDKN9kq }
=vD}O@tN =rzhaU'A' template<typename T1>
q6T>y%|FZ static T*& get(T1*& ptr) {
z#Cgd-^7.# return dynamic_cast<T*> (ptr);
jlM%Y
ZC }
F!MxC };
|QO)xEn~ J]gtgt^ #endif /* TYPEUTILS_H_ */
}Zp5d7(@w )%Lgo${[; Q Q: 570508473
;yDXo\gm 邮 件:
athzhang@gmail.com
3F\UEpQ 电 话:(0512) 55253348,(0) 18912671348
m'"Ra- 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
&?0hj@kd~