一个简易的类型判别器 a.F6!? 54 8w
v 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
!Xt=+aKN 38P_wf~\ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
p-U'5<n 代码: 全选/*
Xg#g`m%(M * File: TypeUtils.h
~mUP!f * Author: kwarph [
kwarph@gmail.com ]
|L{<=NNs:D * Time: 2009-3-21 下午03:25:02
GXaCH))TO *
B^(0>Da\ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
D]+tr% */
Py(l+Ik`> UQz8":#V #ifndef TYPEUTILS_H_
wL 5p0Xl #define TYPEUTILS_H_
_96hw8 O2{_:B>K[ template<typename T>
,cm;A'4] struct InstanceOf {
DBi3 j F]Zg9c{# template<typename T1>
x@bZ((w static bool test(const T1*& ptr) {
;2RCgX!'% const T* t = dynamic_cast<const T*> (ptr);
s#sr1[9}G return t != 0;
(mHFyEG }
yS/ovd kl[bDb1p template<typename T1>
1p,G8 v+B static bool test(T1*& ptr) {
v
F L{j T* t = dynamic_cast<T*> (ptr);
z$p+l] return t != 0;
?7:"D e }
}}~^! iXC/?
EK4 template<typename T1>
,K7C2PV6 static const T* get(const T1*& ptr) {
b]6;:Q!d const T* t = dynamic_cast<const T*> (ptr);
V]}/e!XK\ return t;
0t7yK }
+u_mT$|T M:?eK
[h template<typename T1>
vzaxi;S< static T*& get(T1*& ptr) {
>FHTBh& Y return dynamic_cast<T*> (ptr);
u
` 9Eh; }
l;Zc[6 };
~PuPY:" cJ:BEe #endif /* TYPEUTILS_H_ */
3v:RLnB 0y'34} Q Q: 570508473
k`
(_~/# 邮 件:
athzhang@gmail.com )'%L#
电 话:(0512) 55253348,(0) 18912671348
_a*Wk 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
$K<jmEC@<