一个简易的类型判别器 !,*Uvs@b P{8<U8E 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
/(i~Hpp S'sI[?\x 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
J!zL)u| 代码: 全选/*
o1Wf#Zq * File: TypeUtils.h
G:MQ_tfr& * Author: kwarph [
kwarph@gmail.com ]
'gk^NAG2^E * Time: 2009-3-21 下午03:25:02
N&u(9Fxn *
hud'@O"R+ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
,9.NMFn */
SN#N$] y5s G<t_=j/r #ifndef TYPEUTILS_H_
z'EphL7r #define TYPEUTILS_H_
V> Nw2u!! AE%zqvp> template<typename T>
' PmBNT struct InstanceOf {
(HeIO :NWrbfz template<typename T1>
{d,^tG} static bool test(const T1*& ptr) {
Km0P)Z const T* t = dynamic_cast<const T*> (ptr);
;{g>Z| return t != 0;
rrZ'Dz }
v<?k$ e5 PO=A^ b template<typename T1>
x
~@%+d
static bool test(T1*& ptr) {
pz/vvH5 T* t = dynamic_cast<T*> (ptr);
Ak2Vf0E b return t != 0;
?&.Eg^a" }
"o<&3c4 &s&Ha{(!w template<typename T1>
SS-7y:6y> static const T* get(const T1*& ptr) {
e\]CZ5hs3 const T* t = dynamic_cast<const T*> (ptr);
1ka58_^ return t;
DZ5h<1 }
_[J>GfQd /6p7k template<typename T1>
~&_BT`a static T*& get(T1*& ptr) {
`I5So-^&z return dynamic_cast<T*> (ptr);
}4xz, oN }
$2k9gO };
4&E&{<; p,#**g: #endif /* TYPEUTILS_H_ */
Z`@< O% "ODs.m oq Q Q: 570508473
P Z+Rz1x 邮 件:
athzhang@gmail.com G~Fjla\?Q 电 话:(0512) 55253348,(0) 18912671348
@X#e 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
OlYCw.Zu