一个简易的类型判别器 h*2NFL~# +~6Nq(kV 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
VKjDK$ }5 2] 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
a=m7pe^ 代码: 全选/*
0\N n.x% * File: TypeUtils.h
TbY<(wrMZ * Author: kwarph [
kwarph@gmail.com ]
ac-R q.GQY * Time: 2009-3-21 下午03:25:02
m,,FNYW *
YhVV~bvz* * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
VOj{&O2c */
l Wa4X#~. '_nJ DM #ifndef TYPEUTILS_H_
U',9t #define TYPEUTILS_H_
[M7& [HV>4,,3" template<typename T>
2Op\`Ht& struct InstanceOf {
wcdD i[E>i w;RG*rv template<typename T1>
\sUk71L`j static bool test(const T1*& ptr) {
u;[*Z const T* t = dynamic_cast<const T*> (ptr);
zi-;7lT return t != 0;
]Tb ?k+a }
Vh.9/$xQ JwkMRO template<typename T1>
7(q EHZEr static bool test(T1*& ptr) {
WxN@&g( T* t = dynamic_cast<T*> (ptr);
rW~hFSrV[o return t != 0;
eC9nOwp]xH }
h;^H*Y&` 2W}f|\8MX template<typename T1>
M7\; Y static const T* get(const T1*& ptr) {
7nzNBtk const T* t = dynamic_cast<const T*> (ptr);
C;u8qVI return t;
,r&:C48dI }
Eagl7'x "I)*W8wTn template<typename T1>
dKOW5\H' static T*& get(T1*& ptr) {
^^ Q'AE return dynamic_cast<T*> (ptr);
\Kx@?, }
&I&:
};
u9t@%H)lZ `*A!vO8 #endif /* TYPEUTILS_H_ */
5BL4VGwJ Lq&;`)BJ Q Q: 570508473
$*%ipD}f 邮 件:
athzhang@gmail.com @Gh?|d7bD 电 话:(0512) 55253348,(0) 18912671348
"|2|Vju% 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
f`8]4ms"