一个简易的类型判别器 .7J#_*NV ,Co|-DYf} 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
ldf\;Qk [DuttFX^x 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
:'Vf
g[Uq 代码: 全选/*
BT !^~S%w * File: TypeUtils.h
TP*hd * Author: kwarph [
kwarph@gmail.com ]
vz&|J
* Time: 2009-3-21 下午03:25:02
7P} W
* *
?4YGT * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
a,,ex i */
H8=N@l IW5,7. #ifndef TYPEUTILS_H_
yWmJ~/*lG #define TYPEUTILS_H_
e[1hz_v "69s)~ template<typename T>
=F|{#F struct InstanceOf {
KS+'|q<?w /WcG{Wdp template<typename T1>
!t"4!3 static bool test(const T1*& ptr) {
Z{*\S0^ST const T* t = dynamic_cast<const T*> (ptr);
7g^]:3f! return t != 0;
YP oSRA L }
aj='b.2) &$+AXzn template<typename T1>
,~U>'&M; static bool test(T1*& ptr) {
!|(-=2` T* t = dynamic_cast<T*> (ptr);
n9\TO9N return t != 0;
KYm0@O>; }
&C_j\7Dq $c!p& template<typename T1>
X0HZH?V+ static const T* get(const T1*& ptr) {
hPB9@hT$ const T* t = dynamic_cast<const T*> (ptr);
Q0sI(V# return t;
hgG9m[?K }
ic:zsuEm b`Zx!^ template<typename T1>
M/f<A$xx_ static T*& get(T1*& ptr) {
#~]zhHI return dynamic_cast<T*> (ptr);
'ms-*c&
}
{ l/U6]( };
q1x`Bj `7E;VL^Y1 #endif /* TYPEUTILS_H_ */
T=DbBy0- %@b0[ZC Q Q: 570508473
h,:m~0gmj 邮 件:
athzhang@gmail.com ]h`&&B qt 电 话:(0512) 55253348,(0) 18912671348
.vf'YNQ% 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
mY|)KJ