一个简易的类型判别器 ~>:uMXyV2t ay}}v7)GM 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
p8CDFLuV v8Ga@* 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
s+{)K 代码: 全选/*
&)4#0L4 * File: TypeUtils.h
BeAkG_uG * Author: kwarph [
kwarph@gmail.com ]
b}DxD1*nsI * Time: 2009-3-21 下午03:25:02
.W[ 9G\ *
4[=vt * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
kk6Af\NZ */
WP/?(%#Y "uR,WY #ifndef TYPEUTILS_H_
)erI3?k #define TYPEUTILS_H_
L1'R6W~%dN Z_iVOctP template<typename T>
N"A863> struct InstanceOf {
<Co\?h/< M^f+R'Q3 template<typename T1>
0q6$KP}q static bool test(const T1*& ptr) {
X=Qa TV const T* t = dynamic_cast<const T*> (ptr);
J]|Zh return t != 0;
wjLtLtK? }
8|FHr, *}mk$bA template<typename T1>
?)x"+[2 static bool test(T1*& ptr) {
vumA W* T* t = dynamic_cast<T*> (ptr);
vwA d6Tm return t != 0;
N@Fof(T& }
3zdm-5R.b z"[}Sk template<typename T1>
X8l|^[2F static const T* get(const T1*& ptr) {
2`2S94' const T* t = dynamic_cast<const T*> (ptr);
>"}z
% # return t;
~!bA<q }
B!>hHQ2
bq+Q$#F2X template<typename T1>
h^Bp^V5# static T*& get(T1*& ptr) {
>M `ryM2=D return dynamic_cast<T*> (ptr);
G)|s(C! }
CFo>D\*J };
WoYXXYP/E S.^/Cl;aj #endif /* TYPEUTILS_H_ */
1?!z<< v'fX'/ Q Q: 570508473
J 'qhY'te 邮 件:
athzhang@gmail.com {`X O3 电 话:(0512) 55253348,(0) 18912671348
h 3.6<vM 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
d
:(&q