一个简易的类型判别器 h4\j=Np p~h)@ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Pn;Tg7oz 1`;,_>8 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
E@%X 代码: 全选/*
Xgs 31#K * File: TypeUtils.h
8T2iqqG/1 * Author: kwarph [
kwarph@gmail.com ]
m:{ws~ * Time: 2009-3-21 下午03:25:02
hj8S# *
%%=PpKYtSD * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
6,D)o/_ */
9sR?aW^$,/ l-GQ AI8 #ifndef TYPEUTILS_H_
Mr8r(LGY #define TYPEUTILS_H_
|D
?}6z ;g
M$%!& template<typename T>
R>05MhA+ struct InstanceOf {
qxR7;/@j ) Ul41RNy) template<typename T1>
$d[ xSwang static bool test(const T1*& ptr) {
Ki"o0u const T* t = dynamic_cast<const T*> (ptr);
+/L "A return t != 0;
Xw|t.0 }
2?)bpp$WZ xK3
xiR template<typename T1>
99<0xN(25 static bool test(T1*& ptr) {
kDrqV{_ T* t = dynamic_cast<T*> (ptr);
QnWM<6xK" return t != 0;
%S2^i3 }
BgzER[g|q{ @L)=epC template<typename T1>
.7!n%Ks static const T* get(const T1*& ptr) {
:n4X>YL) const T* t = dynamic_cast<const T*> (ptr);
cP4K9:k return t;
|]<eJ|\= }
2rr}5i)r| Zv`j+b template<typename T1>
T2nbU6H static T*& get(T1*& ptr) {
~m]sJpW<" return dynamic_cast<T*> (ptr);
UP@a
?w }
]G0`W6;$] };
kg>Ymo. w_gPX0N}3n #endif /* TYPEUTILS_H_ */
q 16jL,i NbD"O8dL~E Q Q: 570508473
ed,w-;(n~ 邮 件:
athzhang@gmail.com IQZBH2R 电 话:(0512) 55253348,(0) 18912671348
cR0RJ$[d 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
?ah<Qf]