一个简易的类型判别器 }|8^+V& m&q0 _nay 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
s%vy^x29 qW4\t 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
>Sw?F& 代码: 全选/*
(s|WmSQ * File: TypeUtils.h
oy[ px9Wx * Author: kwarph [
kwarph@gmail.com ]
16@<G * Time: 2009-3-21 下午03:25:02
F+BCzsm7$ *
GZx*A S]+ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
:YkAp9civ */
{=&({ cS =\ 5f_g2M #ifndef TYPEUTILS_H_
G[u6X_Q #define TYPEUTILS_H_
tZg)VJQys ndN*X' template<typename T>
>hG*=4oh struct InstanceOf {
87S,6 Y }{,Wha5\n template<typename T1>
(igB'S5wf static bool test(const T1*& ptr) {
>e.KD)qA const T* t = dynamic_cast<const T*> (ptr);
X6t9*|C return t != 0;
#J5_z#-Q; }
KMqGWO* };P=|t(r template<typename T1>
rxy5Nrue static bool test(T1*& ptr) {
>P} XCAU T* t = dynamic_cast<T*> (ptr);
d2U?rw_ return t != 0;
v}AjW%rB
}
hc0 $mit 1.8"N&s template<typename T1>
|)&d9|] static const T* get(const T1*& ptr) {
z9
#- const T* t = dynamic_cast<const T*> (ptr);
69:-c@L0 return t;
o F_{oV' }
Y1ca=ewFx jxhZOLG template<typename T1>
}?6;;d# static T*& get(T1*& ptr) {
ld({1jpX, return dynamic_cast<T*> (ptr);
1#AxFdm1 }
_tjexS' };
8 ?y| h|Qb:zEP, #endif /* TYPEUTILS_H_ */
O<@L~S] ,(sE|B#s Q Q: 570508473
*h).V&::O 邮 件:
athzhang@gmail.com qq[Dr|%7 电 话:(0512) 55253348,(0) 18912671348
&0G9v 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
<u#
7K\: