一个简易的类型判别器 MaHP):~
UsFn! !+ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
,I5SAd|dX =HsE:@ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
M:}u| 代码: 全选/*
!*"fWahv * File: TypeUtils.h
HBOyiIm Q * Author: kwarph [
kwarph@gmail.com ]
xIa7F$R 0 * Time: 2009-3-21 下午03:25:02
37jxl+ *
9>9EZ?4m * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
io+V4m
*/
JJtx `@Bc v
'+]T= #ifndef TYPEUTILS_H_
}}tbOD)t #define TYPEUTILS_H_
-GCo`PR?b Px=@Tw N, template<typename T>
9|}Pf_5]%[ struct InstanceOf {
`2@.%s1o= ySmbX template<typename T1>
edq,: static bool test(const T1*& ptr) {
vsj4?0= const T* t = dynamic_cast<const T*> (ptr);
PZusYeV8b return t != 0;
s<FBr, }
P7.bn \|S!g_30m template<typename T1>
!>`Fg>uy static bool test(T1*& ptr) {
g5@g_~ g T* t = dynamic_cast<T*> (ptr);
qt~=47<d return t != 0;
[ncK+rGAc }
I}
jgz ~x9]?T template<typename T1>
yk`qF'4] static const T* get(const T1*& ptr) {
aaFT const T* t = dynamic_cast<const T*> (ptr);
L\PmT return t;
w]0@V}}u$o }
\c:$eF R2Fjv@Egk template<typename T1>
VIT|# static T*& get(T1*& ptr) {
",$_\l return dynamic_cast<T*> (ptr);
_VKI@ }
uX6yhaOp| };
{?H5Pw>{%h (h3L= #endif /* TYPEUTILS_H_ */
w*ans}P7 g|>LT_ Q Q: 570508473
"r-P[EKpL 邮 件:
athzhang@gmail.com PW5]+ |# 电 话:(0512) 55253348,(0) 18912671348
u
S1O-Q> 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
AI.(}W4]