一个简易的类型判别器 ?<h|Q~JH GGF;4 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
EhK~S(r^ .N~YVul[a* 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
6SVh6o@] 代码: 全选/*
Ps=<@,dks * File: TypeUtils.h
0{Bhr12V * Author: kwarph [
kwarph@gmail.com ]
YH-+s
* Time: 2009-3-21 下午03:25:02
FTT=h0t *
Y1s3>` * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
%LZ-i?DL4Q */
3lG=.yD Y>a2w zr #ifndef TYPEUTILS_H_
x^u[L$ #define TYPEUTILS_H_
IKVS7m Wt $q{g{C template<typename T>
%o4HCzId< struct InstanceOf {
\L4+Dv<z 8Ssk>M* template<typename T1>
@$]
CC1Y static bool test(const T1*& ptr) {
r}~|,O3bc' const T* t = dynamic_cast<const T*> (ptr);
"Qfw)!# return t != 0;
]~J.YX9ST }
n^:Wc[[m ~h@<14c{X template<typename T1>
u8sK~1CPf static bool test(T1*& ptr) {
}\wTV*n`X T* t = dynamic_cast<T*> (ptr);
:j4i(qcF return t != 0;
C
YKW4 }
[(eO_I5ep 3E`poE template<typename T1>
|C_sP,W static const T* get(const T1*& ptr) {
a]nyZdt` const T* t = dynamic_cast<const T*> (ptr);
rn"}@5 return t;
+~cW0z }
r5(-c]E7 [2Rw)!N template<typename T1>
xGVL|/?8 static T*& get(T1*& ptr) {
1 6G/'Hb return dynamic_cast<T*> (ptr);
9<Kc9Z }
L; f };
}5{#f`Ca6 zyF[I6Gs #endif /* TYPEUTILS_H_ */
*oP&'$P .>bvI1 Q Q: 570508473
s\#eD0| 邮 件:
athzhang@gmail.com 1h0cId8d 电 话:(0512) 55253348,(0) 18912671348
-Yf pfNt 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
jm$v0=W9#