一个简易的类型判别器 JZ*?1S> Ffqn|}gb 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
(5\d[||9g /-} p7AM 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
/:];2P6#X 代码: 全选/*
q.Aw!]:! * File: TypeUtils.h
Nl>b'G96 * Author: kwarph [
kwarph@gmail.com ]
7B> cmi * Time: 2009-3-21 下午03:25:02
pLFL6\{g *
9hi(P*%q * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
b+fy&rk@- */
S}oF7;'Ga r_2VExk #ifndef TYPEUTILS_H_
~8qFM #define TYPEUTILS_H_
7.=s1~p "B{xC}Tw template<typename T>
P)
0=@{( struct InstanceOf {
(:hmp"S KLM^O$= template<typename T1>
I2!&=" 7@ static bool test(const T1*& ptr) {
pPqbD}p const T* t = dynamic_cast<const T*> (ptr);
tw^.(m5d return t != 0;
A-NC,3 }
\y+F!;IxL BB}iBf I' template<typename T1>
s#CEhb static bool test(T1*& ptr) {
!haXO T* t = dynamic_cast<T*> (ptr);
5|H(N}S_ return t != 0;
t@mw f3, }
5+PBS)pJ]% /VOST^z! template<typename T1>
K0bmU(Xxp static const T* get(const T1*& ptr) {
~V)VGGOL$v const T* t = dynamic_cast<const T*> (ptr);
mCP +7q7 return t;
+(hwe
jyC }
sjbC~Te-- eT
\Q template<typename T1>
olW`.3f static T*& get(T1*& ptr) {
_p^ "! return dynamic_cast<T*> (ptr);
w\[*_wQp }
sJ*U Fm{ };
0hr)tYW,G LGue=Hkp #endif /* TYPEUTILS_H_ */
g{.@|;d<p D+nj[8y Q Q: 570508473
@G&xq"Fg7 邮 件:
athzhang@gmail.com 04LVa|Y@U 电 话:(0512) 55253348,(0) 18912671348
:'Kx?Es 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
mr\L q~*c