一个简易的类型判别器 Lq-Di|6q Q|!}&= 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
w<m)T APfDy 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
^KKU@ab9 代码: 全选/*
DE0gd
ux8 * File: TypeUtils.h
xh7[{n[; * Author: kwarph [
kwarph@gmail.com ]
NI@$" * Time: 2009-3-21 下午03:25:02
,>: *
BW`)q/ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
(|{b ZW} */
R%(ww Hy?+p{{G #ifndef TYPEUTILS_H_
tt|v opz #define TYPEUTILS_H_
9PU9BYBG ]m>N!Iu template<typename T>
?8j#gYx2 struct InstanceOf {
zW,Nv>Ac5 nE~HcxE/ template<typename T1>
500qg({2] static bool test(const T1*& ptr) {
|L@9qwF const T* t = dynamic_cast<const T*> (ptr);
-w0U}Te^ return t != 0;
))pp{X2m }
Rk1B \L|M >N&C-6W template<typename T1>
QGWfF,q static bool test(T1*& ptr) {
h`_@eax T* t = dynamic_cast<T*> (ptr);
*=6,}rX"I return t != 0;
\z/_vzz4 }
34@f(^d+^ fP6]zy^* template<typename T1>
!hBzT7CO static const T* get(const T1*& ptr) {
d%"?^e const T* t = dynamic_cast<const T*> (ptr);
:;wb{q$O return t;
!uC`7a }
eX+FtN rvdhfM!-A template<typename T1>
uSAb static T*& get(T1*& ptr) {
-y@5% _- return dynamic_cast<T*> (ptr);
#^\qFj }
M"E ]r=1 };
DeMF<)# ]<V,5'xh #endif /* TYPEUTILS_H_ */
,%|$#
g 0 ) <lpI';T Q Q: 570508473
E^RPK{zO 邮 件:
athzhang@gmail.com +<^TyIJ0 电 话:(0512) 55253348,(0) 18912671348
][ ,NNXrc& 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
4. &t