一个简易的类型判别器 ggfCfn h{jm 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
o{hZjn- 3(*vZ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
i_`Po% 代码: 全选/*
zt!> * File: TypeUtils.h
Zba<|C * Author: kwarph [
kwarph@gmail.com ]
LCH w. * Time: 2009-3-21 下午03:25:02
(58r9WhS *
#W_-S0>& * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
'cK{FiIT */
FS!vnl8` or7l}X #ifndef TYPEUTILS_H_
*8u<?~9F #define TYPEUTILS_H_
oJE<}~_k N>sHT
=_ template<typename T>
:Z83*SPc struct InstanceOf {
u2I@ fH/ kaECjZ_&+ template<typename T1>
o##!S6:A static bool test(const T1*& ptr) {
7(o:J const T* t = dynamic_cast<const T*> (ptr);
Gu2=+?i?h return t != 0;
,Vz-w;oDn }
"N}MhcdS DwTVoCC template<typename T1>
n-dC!t
static bool test(T1*& ptr) {
Z`%^?My T* t = dynamic_cast<T*> (ptr);
6]HMhv return t != 0;
4T){z^"
}
7kMO);pO NKVLd_f k template<typename T1>
K&-uW _0 static const T* get(const T1*& ptr) {
j~9![s! const T* t = dynamic_cast<const T*> (ptr);
w`=XoYQl~* return t;
#??[;xjs! }
T7Ju7_q} ,WoV)L'? template<typename T1>
"b)EH/s static T*& get(T1*& ptr) {
$o)}@TC return dynamic_cast<T*> (ptr);
8ddBQfCY }
#B_H/9f( };
H5jk#^FD :C&6M79k #endif /* TYPEUTILS_H_ */
p<FqK/ {t]8#[lo Q Q: 570508473
@j(2tJ,w 邮 件:
athzhang@gmail.com 6"r _Y7% 电 话:(0512) 55253348,(0) 18912671348
:/>Zky8,k 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
_ vAc/_N