一个简易的类型判别器 k4y'b h
Pa_VrH 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
r/6o \- $F+ L Ds 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
3r."j2$Hs0 代码: 全选/*
"J8vjr1/ * File: TypeUtils.h
_k~KZ;l * Author: kwarph [
kwarph@gmail.com ]
OCaq3_#tZ * Time: 2009-3-21 下午03:25:02
>!bJslWA *
2KN6} * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
O:"*q&;J */
UIAj] ^#1.l=s #ifndef TYPEUTILS_H_
199]W Hc #define TYPEUTILS_H_
T4 N~(Fi) I,VH=Yn5, template<typename T>
r"a5(Q;n struct InstanceOf {
-0eq_+oQ `^Eae template<typename T1>
3
M10fI? static bool test(const T1*& ptr) {
`#QG6/0 const T* t = dynamic_cast<const T*> (ptr);
KdUnD4d return t != 0;
Y>!W&Gtu }
N~<}\0 U:p"IY#% template<typename T1>
^9f`3~!#bc static bool test(T1*& ptr) {
+
d)~;I$ T* t = dynamic_cast<T*> (ptr);
zZ0V6T} return t != 0;
yl+)I }
Saq>o. 4O"kOEkKT> template<typename T1>
W_n.V" hN static const T* get(const T1*& ptr) {
R6o<p<fTh const T* t = dynamic_cast<const T*> (ptr);
Im1qWe return t;
9NXiCP9A }
-#M~NbI, 0$Db@ template<typename T1>
(G!J== static T*& get(T1*& ptr) {
MQMy Z: return dynamic_cast<T*> (ptr);
j?) `VLZ }
`%I{l };
<a}|G1 h s(LqhF[N2] #endif /* TYPEUTILS_H_ */
m:<3d]L T>o# *{qn Q Q: 570508473
uy\+#:44d 邮 件:
athzhang@gmail.com 3;gtuqwD$ 电 话:(0512) 55253348,(0) 18912671348
9f[[%80 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
'MlC
1HEp