一个简易的类型判别器 6b4]dvl_ x&FBh!5H 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
SR9M:%dga o1<Z;2# 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
t;[?Q\ 代码: 全选/*
(i^<er q * File: TypeUtils.h
"LVN:|! * Author: kwarph [
kwarph@gmail.com ]
HR?a93 * Time: 2009-3-21 下午03:25:02
NbhQ- *
Yb>A?@S * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
hB]<li)"C */
28xLaob Otm7j>w #ifndef TYPEUTILS_H_
sRGIHT# #define TYPEUTILS_H_
]-u>HO g\ |\q@XCGei template<typename T>
LBhDP5qF struct InstanceOf {
5cC)&}I \YF'qWB template<typename T1>
iA+zZVwO static bool test(const T1*& ptr) {
a[V4EX1E const T* t = dynamic_cast<const T*> (ptr);
J`A )WsKkb return t != 0;
:}fIu?hCA }
ot,e?lF j|(bdTZY: template<typename T1>
0kld77tn
2 static bool test(T1*& ptr) {
>zcp(M98 T* t = dynamic_cast<T*> (ptr);
^g N?Io return t != 0;
KHt#mQy)9 }
fmk(} ^9*Jz{e template<typename T1>
BQ77n2(@ static const T* get(const T1*& ptr) {
\EeK<)4: const T* t = dynamic_cast<const T*> (ptr);
>]l7AZ:, return t;
gS^Y? }
TInp6w+u fhQ}Z%$ template<typename T1>
$T}Dn[. static T*& get(T1*& ptr) {
EN2/3~syO- return dynamic_cast<T*> (ptr);
*[wj ) }
r*4@S~; };
Gw}b8N6E eop7=!`-~~ #endif /* TYPEUTILS_H_ */
{}v<2bS tY$4k26 Q Q: 570508473
G[[<-[C]5 邮 件:
athzhang@gmail.com Z <vTr6? 电 话:(0512) 55253348,(0) 18912671348
's6hCs&|NV 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
_^u^@.Q'i<