一个简易的类型判别器 n[Iu!v\/* /:`
i%E 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
1[BvHOI2 3DAGW"F 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
.crM!{<Y 代码: 全选/*
P! Ed * File: TypeUtils.h
bH/pa#G(
* Author: kwarph [
kwarph@gmail.com ]
2 dD<] * Time: 2009-3-21 下午03:25:02
g]<Z]R` *
KVM@//:{ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
iM|"H.. */
18"VB50b} > &vO4L #ifndef TYPEUTILS_H_
"qTC(F9N$. #define TYPEUTILS_H_
DRW.NL o ]cqZ!4?_ template<typename T>
R96o8#7Uv struct InstanceOf {
O;0<^M/0G pOVghllO template<typename T1>
"YzTMKu static bool test(const T1*& ptr) {
xbrmPGpW$ const T* t = dynamic_cast<const T*> (ptr);
j]B$(pt return t != 0;
[Ht."VxR }
5uV"g5?w 3.<6;? template<typename T1>
+B q}> static bool test(T1*& ptr) {
oiv2rOFu T* t = dynamic_cast<T*> (ptr);
4 ?@uF[ return t != 0;
an=+6lIl }
@oz& '^ e/F)0 template<typename T1>
QR5,_wJ& static const T* get(const T1*& ptr) {
oA;jy const T* t = dynamic_cast<const T*> (ptr);
@b!R2Yq return t;
'hlB;z|T }
9<A\npD KBr5bcm4u template<typename T1>
kh?#={]Z static T*& get(T1*& ptr) {
6PJJ?}P^1 return dynamic_cast<T*> (ptr);
CS;W)F }
~f=6?5.wa };
/SCZ& YZBzv2'\x #endif /* TYPEUTILS_H_ */
V^ fGRA kg?T$}O Q Q: 570508473
Y-%l7GErhL 邮 件:
athzhang@gmail.com A )RI:?+ 电 话:(0512) 55253348,(0) 18912671348
6>=-/)p} 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
lpfwlB'~9