一个简易的类型判别器 [yN+(^i #&kj> 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
-V{"Lzrfug 7d%x 7!E 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
,uC-^T
|n 代码: 全选/*
u@e.5_:S) * File: TypeUtils.h
1}la)lC * Author: kwarph [
kwarph@gmail.com ]
k^;n$r"i5 * Time: 2009-3-21 下午03:25:02
qA)YYg/G *
s$pXn&: * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
8&8!(\xv */
ow9a^|@a !@Qk=Xkg #ifndef TYPEUTILS_H_
^wBlQmW7J #define TYPEUTILS_H_
8_4!Ar>2 ds!nl1 template<typename T>
B;N<{Gb struct InstanceOf {
ULz<P Z}!'fX." template<typename T1>
x @q.u3o9 static bool test(const T1*& ptr) {
ZS=H1 const T* t = dynamic_cast<const T*> (ptr);
;GG,Z#\m return t != 0;
c|.te]!ds }
rmA?Xlh\ kE<CuO template<typename T1>
l,h`YIy static bool test(T1*& ptr) {
W>a}g[Ad T* t = dynamic_cast<T*> (ptr);
YRVh[Bqg` return t != 0;
)/'WboL }
td7(444] AA[1[ template<typename T1>
N8Rq7i3F?a static const T* get(const T1*& ptr) {
bT 42G[x const T* t = dynamic_cast<const T*> (ptr);
`.pEI q^ return t;
!1I# L!9 }
)M0(vog J'
uaZI>' template<typename T1>
{Ia1H static T*& get(T1*& ptr) {
<$-^^b(y return dynamic_cast<T*> (ptr);
hT-^1:N }
_Sd^/jGpU };
ben-<3r |OCiq|# #endif /* TYPEUTILS_H_ */
%"
bI2 &2u
|7U. Q Q: 570508473
b
3Q6- 邮 件:
athzhang@gmail.com 2{=D)aC$f 电 话:(0512) 55253348,(0) 18912671348
=5Db^ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
~_JfI7={Jn