一个简易的类型判别器 QsmG(1= Zv=p0xH 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
(!'; Oed&B 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
7 #,+Q(2 代码: 全选/*
(WW,]#^
* File: TypeUtils.h
"gCSbMq(Vq * Author: kwarph [
kwarph@gmail.com ]
B(MO!GNg= * Time: 2009-3-21 下午03:25:02
nDvny0^a *
>NwrJSx * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
u%O^hcfb */
fxLhVJ"b `,(1' #ifndef TYPEUTILS_H_
%;9eh' #define TYPEUTILS_H_
ZUyM:$ &-+&`h|s template<typename T>
|k'I?:' struct InstanceOf {
jkNZv. )p WII_s|YSt% template<typename T1>
0 EXAdRR static bool test(const T1*& ptr) {
mId{f const T* t = dynamic_cast<const T*> (ptr);
gzDb~UEoF return t != 0;
9wKz p }
q_f
v1U3 tazBZ'\c template<typename T1>
_>5BFQ_ static bool test(T1*& ptr) {
gWS49*O T* t = dynamic_cast<T*> (ptr);
#%e`OA(b return t != 0;
a~ REFy }
$^7&bQ B>47Ic template<typename T1>
]dDyz[NuvD static const T* get(const T1*& ptr) {
,)L.^< const T* t = dynamic_cast<const T*> (ptr);
&TbnZnv return t;
!wrl.A/P }
Dz)bP{iq" oRu S_X template<typename T1>
A|>a
Gy static T*& get(T1*& ptr) {
wCvD4C.WH return dynamic_cast<T*> (ptr);
t9pPG {1 }
nbpN+a% };
7<.f&1MgI =GR
Em5 #endif /* TYPEUTILS_H_ */
'~ ]b;nA ((dG< Q Q: 570508473
Y,mH ] 邮 件:
athzhang@gmail.com sCb?TyN'n 电 话:(0512) 55253348,(0) 18912671348
"<O?KO3K 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
~[9 ]M)=O0