一个简易的类型判别器 *f{7 v,n); 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
>g=^,G}y >+L7k^[,0 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
|Es0[cU 代码: 全选/*
U> W|(Y * File: TypeUtils.h
m[8IEKo * Author: kwarph [
kwarph@gmail.com ]
5$anqGw * Time: 2009-3-21 下午03:25:02
$?-7OXj< *
HB%K|&!+ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
7@JjjV */
vxb@9eb!H B
i'd5B5 #ifndef TYPEUTILS_H_
{&E?<D2_& #define TYPEUTILS_H_
P%iP:16 64SW template<typename T>
'Cg V0&@ struct InstanceOf {
?qy*s3j'M nQ|GqU\oA template<typename T1>
?fB5t;~E static bool test(const T1*& ptr) {
)GK+ const T* t = dynamic_cast<const T*> (ptr);
XWJ SLN(O return t != 0;
&i)helXs] }
/ HL_$g< 7vw;Egd@@- template<typename T1>
{ E^U6@ static bool test(T1*& ptr) {
AH|Y<\ T* t = dynamic_cast<T*> (ptr);
>d#3|;RY return t != 0;
B&
"RS }
0',[J D '<$ g template<typename T1>
Vn^) static const T* get(const T1*& ptr) {
>:A<"wZ const T* t = dynamic_cast<const T*> (ptr);
eIsT!V"7 return t;
wE?CvL }
;>8kPG -;vT<G3 template<typename T1>
!W~QT} static T*& get(T1*& ptr) {
S#mK
Pi+3 return dynamic_cast<T*> (ptr);
L1:nfH&:' }
oXdel
Ju? };
?.Q3 pUT eSn$k:\W #endif /* TYPEUTILS_H_ */
<*_o0;h| g>yry}>04% Q Q: 570508473
V:OiW"/ 邮 件:
athzhang@gmail.com NCn`}QP 电 话:(0512) 55253348,(0) 18912671348
`0rRKlb j4 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
&atyDFJ'