一个简易的类型判别器 rlIDym9nY~ FtL{f=
在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
,
,=7deR 8C!D=Vhh 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
-Y"'=zkO 代码: 全选/*
@(_M\>!%M * File: TypeUtils.h
fooQqWC) * Author: kwarph [
kwarph@gmail.com ]
Q-LDFnOFwp * Time: 2009-3-21 下午03:25:02
muqIh!nn *
=7WE * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
09>lx$ */
rM?ox
(e$/@3* #ifndef TYPEUTILS_H_
C/L+:b&x~ #define TYPEUTILS_H_
p|b&hgA [$b\#{shtP template<typename T>
U~e^ struct InstanceOf {
Z>#MTxU( O-ZB4hN8 template<typename T1>
|p1pa4%} static bool test(const T1*& ptr) {
/K./k!'z const T* t = dynamic_cast<const T*> (ptr);
,wvzY7% return t != 0;
L?c7M}vV }
ve|`I=?2 H _%yh,L template<typename T1>
VD*xhuy$k static bool test(T1*& ptr) {
?NL>xMA T* t = dynamic_cast<T*> (ptr);
w/(hEF ' return t != 0;
]8i2'x }
j4B|ktf ^YLpZoo template<typename T1>
=_/,C static const T* get(const T1*& ptr) {
? <.U, const T* t = dynamic_cast<const T*> (ptr);
]%K 8 return t;
pWwB<F }
bl)iji`] ~!w()v n template<typename T1>
'"=Mw;p static T*& get(T1*& ptr) {
m%hUvG| i return dynamic_cast<T*> (ptr);
q3s
+?& }
t,2Q~ied= };
faVR % `Oc`I9 #endif /* TYPEUTILS_H_ */
A%G
\
AT 'h6Vj6 Q Q: 570508473
Gv};mkX[N 邮 件:
athzhang@gmail.com aDik1Q 电 话:(0512) 55253348,(0) 18912671348
h*qoe(+ZD 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
'e(`2