一个简易的类型判别器 J2 {?P
cs .%;UP7g 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
+{N LziO =xScHy{$ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
B ?96d'A 代码: 全选/*
lDd+.44V: * File: TypeUtils.h
Se+sgw_" * Author: kwarph [
kwarph@gmail.com ]
Rok`}t * Time: 2009-3-21 下午03:25:02
`sOCJ|rc5 *
4ihv|%@ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
LL@VR#n"V */
XZhuV< iZ2|/hnw #ifndef TYPEUTILS_H_
&S9Sl #define TYPEUTILS_H_
9cud CF ,2S w6u template<typename T>
j+NOT`& struct InstanceOf {
((F[]<? )| @'}k+ template<typename T1>
Ol3$!x9 static bool test(const T1*& ptr) {
B;?)
const T* t = dynamic_cast<const T*> (ptr);
X(kyu,w return t != 0;
O0Y/y2d }
E$] 7w4,n o^%4w>| template<typename T1>
Q.Uyl:^PxU static bool test(T1*& ptr) {
0\#uxzdhJ T* t = dynamic_cast<T*> (ptr);
DZKVZ_q return t != 0;
O?|opD }
q\*",xZxwz !fUrDOM0E template<typename T1>
syhTOhOX static const T* get(const T1*& ptr) {
v`evuJ\3 const T* t = dynamic_cast<const T*> (ptr);
YqwDvJWX return t;
gE'b.04Y9i }
.w2X24Mmb is?H1V~8`$ template<typename T1>
k ]C+/ static T*& get(T1*& ptr) {
=FUORj\O return dynamic_cast<T*> (ptr);
GY 4?}T^s }
MB;<F };
m~ :W$x1+ tep_g4CQR_ #endif /* TYPEUTILS_H_ */
&>43l+ ^;4nHH7z-, Q Q: 570508473
Ex^|[iV 邮 件:
athzhang@gmail.com 6U)Lhf\'o 电 话:(0512) 55253348,(0) 18912671348
QWG?^T
fi 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
i~:FlW]