一个简易的类型判别器 'RCX6TKBnR zrur-i$N+ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
m RtE~~p et}s yPH 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
dJZ
9mP!d 代码: 全选/*
{>#4{D00 * File: TypeUtils.h
OH~I+=}. * Author: kwarph [
kwarph@gmail.com ]
i)d'l<RA * Time: 2009-3-21 下午03:25:02
Lmyw[s\U *
1Q9eS& * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
D5
^Wi Q< */
L|w}#|- {7o|*M #ifndef TYPEUTILS_H_
a7l-kG=R; #define TYPEUTILS_H_
'I)E.D oF wB0ONH[ template<typename T>
-"3<Ll struct InstanceOf {
jo=,j/,l ^'aMp}3iu template<typename T1>
V9kL\Ys static bool test(const T1*& ptr) {
nc%ly * const T* t = dynamic_cast<const T*> (ptr);
}\!38{& return t != 0;
m/W)IG> }
lO0 PZnW9 Wtwh.\Jba template<typename T1>
Y$?<y static bool test(T1*& ptr) {
P$i?%P~ T* t = dynamic_cast<T*> (ptr);
A?*_14& return t != 0;
@[4 Tdf }
|>P`Gl]E hE>i~:~R template<typename T1>
htGk: static const T* get(const T1*& ptr) {
za20Y?)[ const T* t = dynamic_cast<const T*> (ptr);
!&D&Gs return t;
niV= Ijt{5 }
+9mnxU> 85 tQHm6j template<typename T1>
vxzOG?Xc: static T*& get(T1*& ptr) {
DKfw8"L] return dynamic_cast<T*> (ptr);
ApYri|^r }
3g]Sp/ };
j6KGri f|1GlUA{t #endif /* TYPEUTILS_H_ */
'i|z>si[* ^ cn)eA Q Q: 570508473
;$\d^i{N 邮 件:
athzhang@gmail.com fr%}|7 电 话:(0512) 55253348,(0) 18912671348
6*/o 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
~E=.*: 5(