一个简易的类型判别器 SM3qPlsF .Ioj]r 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
-wA^ao G5;N#^myJ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
!%v=9muay 代码: 全选/*
<W$Ig@4[.d * File: TypeUtils.h
%+>t @F,GM * Author: kwarph [
kwarph@gmail.com ]
$x%3^{G * Time: 2009-3-21 下午03:25:02
52RFB!Z[ *
D4';QCwo * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
WnATgY t */
ZH@BHg|}H h ~\bJ*Zp #ifndef TYPEUTILS_H_
]g}Tqf/N% #define TYPEUTILS_H_
:#yjg1aej _1<zpHp template<typename T>
G{4~{{tI struct InstanceOf {
:Fvd?[ 7&I+mw/X template<typename T1>
FNQR sNi static bool test(const T1*& ptr) {
6[iu CMOZ const T* t = dynamic_cast<const T*> (ptr);
|.8lS3C return t != 0;
6Vq]AQx }
KN41kkN aWtyY[= template<typename T1>
O-5s}RT static bool test(T1*& ptr) {
qa|"kRCO T* t = dynamic_cast<T*> (ptr);
VW,"
dmC return t != 0;
7mUpn:U }
ZD)pdNX /Dh[lgF0C template<typename T1>
k{{ iF static const T* get(const T1*& ptr) {
i2h,=NHJh? const T* t = dynamic_cast<const T*> (ptr);
>n`!S`)9{ return t;
C^dnkuA }
Gp<7i5 ;p$KM-?2D template<typename T1>
k@,&'imx static T*& get(T1*& ptr) {
Y~R['u, return dynamic_cast<T*> (ptr);
tks3xS }
g%Yw Dr=0t };
=K#12TRf Obd};&6Q #endif /* TYPEUTILS_H_ */
b[mAkm?9+1 ZO^Y9\L Q Q: 570508473
xlJ8n+ 邮 件:
athzhang@gmail.com *58`}] 电 话:(0512) 55253348,(0) 18912671348
;PBybRW 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
5)}3C_pmW