一个简易的类型判别器 =cy;{2S'p r_sZw@lqJ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
UV ?.KVD~ Dv7/eRt 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
LU#DkuIG 代码: 全选/*
ZI<p%IQ * File: TypeUtils.h
##%R|P3 * Author: kwarph [
kwarph@gmail.com ]
m,zZe}oJ * Time: 2009-3-21 下午03:25:02
x]({Po4 *
ya+eGD@N': * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
{gSR49!Q */
In-W, v>vU]6l #ifndef TYPEUTILS_H_
W]8tp@ #define TYPEUTILS_H_
C:$12{I?* YNGG> ;L template<typename T>
G4!$48 struct InstanceOf {
Cm4$&? GJ >vL template<typename T1>
hFC4CqBV static bool test(const T1*& ptr) {
OG#7Va const T* t = dynamic_cast<const T*> (ptr);
vt;<+"eps return t != 0;
+6vm4(3? }
R~-r8dWcw YF{ KSGq template<typename T1>
%cM2;a=2 static bool test(T1*& ptr) {
#
;,b4O7@ T* t = dynamic_cast<T*> (ptr);
5 =Os
sAr return t != 0;
OL{U^uOhY }
0:(`t~ sLx!Do$' template<typename T1>
b"Hg4i) static const T* get(const T1*& ptr) {
/2,s-^ const T* t = dynamic_cast<const T*> (ptr);
AJRfl% 3 return t;
@@U'I^iG }
>x%Z^U URW#nm? template<typename T1>
/rd6p{F static T*& get(T1*& ptr) {
wW4/]so M return dynamic_cast<T*> (ptr);
7y",%WYSD }
Jo1=C.V`Y };
1=DUFl. =,D3e+P' #endif /* TYPEUTILS_H_ */
=bUVGjr%96 1>W|vOv"Z? Q Q: 570508473
f1Ruaz- 邮 件:
athzhang@gmail.com thk33ss: 电 话:(0512) 55253348,(0) 18912671348
[YT"UVI 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
*iB_$7n`