一个简易的类型判别器 n5QO'Jr%[ :BxO6@>Xc 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
li*S^uSF N]W*ei 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
LDg9@esi 代码: 全选/*
&E`Nu (e * File: TypeUtils.h
b~^'P * Author: kwarph [
kwarph@gmail.com ]
/O[6PG * Time: 2009-3-21 下午03:25:02
2c Xae *
VN)WBv
* Copyright (C) 2008-2009, kwarph, All Rights Reserved.
vsI;ooR> */
R2)@Q C@qWour #ifndef TYPEUTILS_H_
EE'2<"M #define TYPEUTILS_H_
4u5j
7`O ]O|>nTa template<typename T>
aqSOC(jU struct InstanceOf {
oRbWqN`F. g]f<k2 template<typename T1>
29:2Xu i static bool test(const T1*& ptr) {
sPK ]:iC const T* t = dynamic_cast<const T*> (ptr);
!{l% 3'2 return t != 0;
J^"_H:1[ }
gV]4R"/ IgbuMEfL template<typename T1>
'fn}I0Vc static bool test(T1*& ptr) {
t]&.'n, T* t = dynamic_cast<T*> (ptr);
H
r:*p6 return t != 0;
9'(_*KSH }
@JSWqi> ( %7V template<typename T1>
?h `,@~6u static const T* get(const T1*& ptr) {
>9w^C1" const T* t = dynamic_cast<const T*> (ptr);
_&=`vv' return t;
0j$=KA }
gNr4oOR{ Jz''UJY/O template<typename T1>
7T[L5-g static T*& get(T1*& ptr) {
OXLB{|hH80 return dynamic_cast<T*> (ptr);
](oeMl18R }
t M5(&cQ!d };
#s~ITG#H 7O)ATb#up #endif /* TYPEUTILS_H_ */
}6l:'nW Xf;!w:u Q Q: 570508473
G:e=9qTf 邮 件:
athzhang@gmail.com yl>^QMmo 电 话:(0512) 55253348,(0) 18912671348
-,
+o*BP 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
Yh]a4l0