一个简易的类型判别器 jap5FG+2 fi
tsu"G 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
B<Zm'hdX 3nbTK3, 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
.',d*H))E7 代码: 全选/*
HOr.(gL! * File: TypeUtils.h
'44I}[cA/ * Author: kwarph [
kwarph@gmail.com ]
N0V`xrS * Time: 2009-3-21 下午03:25:02
j9d^8)O, *
PiVp(; rtQ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
s}93nv*ez */
ww5UQs2sn [sXnB$ #ifndef TYPEUTILS_H_
*km!<L7Y #define TYPEUTILS_H_
?Z2_y- aJzyEb template<typename T>
+=Y$v2BZA3 struct InstanceOf {
:m[HUh -\[&<o@/D template<typename T1>
g/W&Ap;qVL static bool test(const T1*& ptr) {
6sQY)F7p const T* t = dynamic_cast<const T*> (ptr);
\!Wph5wA return t != 0;
9TUB3x^ }
5@nvcCp A5IW[Gu! template<typename T1>
j\\uW)ibG static bool test(T1*& ptr) {
FwpTQix! T* t = dynamic_cast<T*> (ptr);
lhBu?q return t != 0;
bNG7A[|B }
5,#aN}v#? QD;:!$Du template<typename T1>
C5^9D static const T* get(const T1*& ptr) {
_X~xfmU const T* t = dynamic_cast<const T*> (ptr);
!a7YM4D return t;
C,) e7 }
(2dkmn T( CTU/a-, template<typename T1>
, D} static T*& get(T1*& ptr) {
)5ev4Qf
return dynamic_cast<T*> (ptr);
:OD-L)Or }
axM(3k.n };
3a?dNwM@ m/"}Y]n! #endif /* TYPEUTILS_H_ */
o(@^V!}V {S"! c. Q Q: 570508473
F
@uOXNz) 邮 件:
athzhang@gmail.com M!O &\2Q 电 话:(0512) 55253348,(0) 18912671348
`C)|}qcC 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
X8 x:/]/0