一个简易的类型判别器 Jy}~ZY qgl-,3GY%N 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
%E@o8 m_Ed[h/I 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
tik*[1it 代码: 全选/*
| WJ]7C * File: TypeUtils.h
\PT!mbB? * Author: kwarph [
kwarph@gmail.com ]
g)Hsd0 * Time: 2009-3-21 下午03:25:02
.?3roQ *
x*F-d2D * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
M x,5 */
7Dssr [ Eu&$Rq} #ifndef TYPEUTILS_H_
) q'D9x9 #define TYPEUTILS_H_
'+$r7?dKP 9c}C<s`M template<typename T>
E<-W & a } struct InstanceOf {
zP0<4E$M` 4$vUD1(' template<typename T1>
v7@"9Uw} static bool test(const T1*& ptr) {
a"xRc const T* t = dynamic_cast<const T*> (ptr);
3,G|oR{D return t != 0;
yw+]S }
7Z:HwZ ~b#<HG\,, template<typename T1>
t*Ro2QZ static bool test(T1*& ptr) {
f2gh|p` T* t = dynamic_cast<T*> (ptr);
rz|Sjtq return t != 0;
'qiAmaX }
mz1m^p)~{ a'Cny(( template<typename T1>
$H3C/| static const T* get(const T1*& ptr) {
dkEbP*yXg const T* t = dynamic_cast<const T*> (ptr);
xzY/$? return t;
y_[VhZ% }
={cM6F}a@ CZ]Dm4 template<typename T1>
mB0`>?#i static T*& get(T1*& ptr) {
R&t2 return dynamic_cast<T*> (ptr);
<75x@! }
uy"i3xD6- };
9:RV5Dt -tWxBGSa@ #endif /* TYPEUTILS_H_ */
@6DKw;Q |b='DJz2 Q Q: 570508473
bt1bTo 邮 件:
athzhang@gmail.com L=Aj+ 电 话:(0512) 55253348,(0) 18912671348
r*mYtS 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
2Q(ZW@0