一个简易的类型判别器 &\tD$g~"
DQ%bcXs 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Q+@/.qJ [A~n=m5H 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
z ntvKOIh 代码: 全选/*
m}Xb #NAF8 * File: TypeUtils.h
Q^13KWvuV * Author: kwarph [
kwarph@gmail.com ]
*Z}^T:3iw} * Time: 2009-3-21 下午03:25:02
%87D(h!.I4 *
RN:VsopL * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
"/H B# */
)gF>nNE dpAj9CX( #ifndef TYPEUTILS_H_
X 4L"M%i #define TYPEUTILS_H_
p G|-<6WY ~EIK template<typename T>
z`g4 < struct InstanceOf {
V /i~IG`h/ cPaz- template<typename T1>
9dS <^E(ZF static bool test(const T1*& ptr) {
cdd6*+E const T* t = dynamic_cast<const T*> (ptr);
6sceymq return t != 0;
Rhi`4wo0$ }
?e=3G4N oF'_x,0 template<typename T1>
pQ~Y7 static bool test(T1*& ptr) {
@M( hyS&on T* t = dynamic_cast<T*> (ptr);
s Zn@y e^ return t != 0;
N"/J1
}
Q9T/@FX `r#]dT[g template<typename T1>
m[aBHA^g static const T* get(const T1*& ptr) {
iA.:{^_)09 const T* t = dynamic_cast<const T*> (ptr);
om_UQgC@r return t;
h]6m+oPW }
j(aok5:e kPRG^Ox8e template<typename T1>
6&oaxAp<s static T*& get(T1*& ptr) {
<Wrn/%tL return dynamic_cast<T*> (ptr);
I{nrOb1G( }
>wSrllmj@ };
!2=m
|, ]?p 9)d=%< #endif /* TYPEUTILS_H_ */
MS5X#B &VPfI Q Q: 570508473
(#e,tu 邮 件:
athzhang@gmail.com ,"en7 电 话:(0512) 55253348,(0) 18912671348
Mo'6<"x 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
M{GT$Q