一个简易的类型判别器 N<_Ko+VF f|a DTWF 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
qturd7 Y
ZaP 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
7/X"z=Q^| 代码: 全选/*
Zq ot{s * File: TypeUtils.h
N\1/JW+ * Author: kwarph [
kwarph@gmail.com ]
I]J*BD#n. * Time: 2009-3-21 下午03:25:02
/=#~ *
!m{2WW- * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
9-bG<`v\E */
H.O(*Q= [H"#7t.V-~ #ifndef TYPEUTILS_H_
)Z@-DA*Q- #define TYPEUTILS_H_
g"!\\:M -lRhz!E] template<typename T>
L$Z(+6m5 struct InstanceOf {
qMS}t3X _b4fS'[ template<typename T1>
;
a/cty0Ch static bool test(const T1*& ptr) {
jlKGXD)Q[ const T* t = dynamic_cast<const T*> (ptr);
U06o;s( return t != 0;
EH+~].PJd }
K{}4zuZ L]2<&%N2 template<typename T1>
2Q$\KRE static bool test(T1*& ptr) {
f'dK73Xof T* t = dynamic_cast<T*> (ptr);
cc> return t != 0;
0%)5.=6 }
VZA3IbK} BSp$F WvT? template<typename T1>
Q)Dwq? static const T* get(const T1*& ptr) {
+~|AT+|iI const T* t = dynamic_cast<const T*> (ptr);
1}`LTPW9 return t;
RyRqH:p)3 }
~' =lou voRfjsS~ template<typename T1>
<qiICb)~ static T*& get(T1*& ptr) {
DB&SOe return dynamic_cast<T*> (ptr);
hD 46@ }
! VRI_c };
z-0:m|=yH H$-$2?5 #endif /* TYPEUTILS_H_ */
1BD6l2y +
>sci Q Q: 570508473
VvgN3e[ 邮 件:
athzhang@gmail.com 2%]hYr; 电 话:(0512) 55253348,(0) 18912671348
coB 6 rW 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
x|apQ6