一个简易的类型判别器 "DW; 6<m
E8:4Z$|c 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
N1O& fMz G?y'<+Awt 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
/pa8>_, ~ 代码: 全选/*
CkJU5D * File: TypeUtils.h
V?k"BU * Author: kwarph [
kwarph@gmail.com ]
hKT ]M[Pv * Time: 2009-3-21 下午03:25:02
"
-Ie *
$S"QyAH~-a * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
BBub' */
G isI/Ir[ Dm3/i|Y #ifndef TYPEUTILS_H_
}>
51oBgk_ #define TYPEUTILS_H_
%7_c|G1 +3c!.] o; template<typename T>
$jd>=TU| struct InstanceOf {
yrDWIU(8;6 jJpSn[{ template<typename T1>
C~2/ 5 static bool test(const T1*& ptr) {
-zeodv7 const T* t = dynamic_cast<const T*> (ptr);
A~vZ}?*M return t != 0;
)$#r6fQO }
8Ee bWs*1 /mB'Fn6) template<typename T1>
g5EdW=Dt, static bool test(T1*& ptr) {
x04JU$@ T* t = dynamic_cast<T*> (ptr);
&h7q=-XU return t != 0;
~YIGOL"? }
gyW*-:C I5"ew=x# template<typename T1>
728}K^7: static const T* get(const T1*& ptr) {
q\q V~G` const T* t = dynamic_cast<const T*> (ptr);
$jYwV0 return t;
~&/|J)} }
Nk-biD/J &`a$n2ycy template<typename T1>
D_6GzgZ static T*& get(T1*& ptr) {
7Q<uk[d0 return dynamic_cast<T*> (ptr);
n2bL- }
Sx,O) };
4#5w^ 2Yx6.e< #endif /* TYPEUTILS_H_ */
o7feH 6Sh S9Fg0E+J Q Q: 570508473
p[(VhbN 邮 件:
athzhang@gmail.com YyX/:1 sg> 电 话:(0512) 55253348,(0) 18912671348
u7u8cVF 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
8Ek<J+&|I