一个简易的类型判别器 ElQJ\% rGTWcJ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
PSW#^o R'G'&H{N 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
xik`W!1S 代码: 全选/*
<9@&oN+T * File: TypeUtils.h
"0|BoG * Author: kwarph [
kwarph@gmail.com ]
m9#}X_&x * Time: 2009-3-21 下午03:25:02
5Xwk*@t2a *
3%XG@OgP * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
^pJ0nY#c */
*Jb_=j*) |.j^G2x #ifndef TYPEUTILS_H_
w`M]0'zls #define TYPEUTILS_H_
OYBotk]{1 M'^(3#ZU template<typename T>
C0zrXhY_v struct InstanceOf {
*I=_*LoG2 -"F0eV+y template<typename T1>
8dc538:q} static bool test(const T1*& ptr) {
M|U';2hZN: const T* t = dynamic_cast<const T*> (ptr);
%v]7BV^%6 return t != 0;
clHM8$ }
ha_@Yqgh IK8%Q(.c template<typename T1>
/r-8T>m static bool test(T1*& ptr) {
xC)7eQn/R T* t = dynamic_cast<T*> (ptr);
PT mf return t != 0;
> P(eW7RL }
:OHSxb>[
q4_** template<typename T1>
LlU'_}> static const T* get(const T1*& ptr) {
'#H&:Htm;L const T* t = dynamic_cast<const T*> (ptr);
GUKDhg,W return t;
wjuGq.qIu
}
e d_m +NM !0b%Jh template<typename T1>
?4:rP@ static T*& get(T1*& ptr) {
6%>/og\% return dynamic_cast<T*> (ptr);
{n\6BTs }
!2(.$}E };
Cq gJ m6-76ma,hi #endif /* TYPEUTILS_H_ */
]+AAT=B<! Y]~IY?I Q Q: 570508473
QS\Uq(Ja\ 邮 件:
athzhang@gmail.com H]BAW *} 电 话:(0512) 55253348,(0) 18912671348
60'6/3 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
L5/mO6;k