一个简易的类型判别器 bqXCe\# nz|;6?LCLY 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
q9RCXo>Y+1 U/2g N
H 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
XB)e;R 代码: 全选/*
6}.B2f9 * File: TypeUtils.h
R<gC,eV<= * Author: kwarph [
kwarph@gmail.com ]
u,
%mVd * Time: 2009-3-21 下午03:25:02
mN^92@eebC *
l[O!_bH * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
uD&!]E3 */
:5G3uN+\ #dDsI]E) #ifndef TYPEUTILS_H_
SzR0Mu3uK #define TYPEUTILS_H_
oW-Tw@D Wiqy".YY template<typename T>
n*^g^gp struct InstanceOf {
GdavCwJ O`O{n_o^u template<typename T1>
p3:x\P<| static bool test(const T1*& ptr) {
QeA)@x.p const T* t = dynamic_cast<const T*> (ptr);
R0;c'W) return t != 0;
v#.FK:u} }
WIXzxI<) )#MKOsOct template<typename T1>
+15j^ Az static bool test(T1*& ptr) {
5M{N-L_eC T* t = dynamic_cast<T*> (ptr);
lph3"a^ return t != 0;
%5*gsgeI }
](NSpU|* g*ES[JJH& template<typename T1>
.s|n}{D_i static const T* get(const T1*& ptr) {
Z~8Xp const T* t = dynamic_cast<const T*> (ptr);
_> .TB\ return t;
|v8 >22y }
9u1)Kr=e )_b#c+ template<typename T1>
4x=rew>Ew static T*& get(T1*& ptr) {
Mk=
tS+ return dynamic_cast<T*> (ptr);
Hjli)*ev }
*}3e'0` };
jK\2y|&&c r_]wa #endif /* TYPEUTILS_H_ */
\~Zj](# ;C-5R U
V Q Q: 570508473
m^h"VH,
邮 件:
athzhang@gmail.com BnqAv xX 电 话:(0512) 55253348,(0) 18912671348
=2bW"gs
I 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
je.jui"