一个简易的类型判别器 &}FWpo! h{CyYsQ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
[V41 Gk l/56;f\IA 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
Bx0=D:j 代码: 全选/*
_>G=xKA#e * File: TypeUtils.h
M>@PRb:Oc * Author: kwarph [
kwarph@gmail.com ]
+e&Q<q!,q * Time: 2009-3-21 下午03:25:02
f&C]}P *
FUZ`ST+OL * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
aY\(R02B */
]{= qdgJ kS)|oUK #ifndef TYPEUTILS_H_
&Pgk$e%> #define TYPEUTILS_H_
6v&@Rlg ,ydn]0SS template<typename T>
Fc a_(jw struct InstanceOf {
gr4JaV nT@FSt template<typename T1>
I6[=tB static bool test(const T1*& ptr) {
HLl"=m1/> const T* t = dynamic_cast<const T*> (ptr);
=_`cY^ib+ return t != 0;
8lF:70wia }
zq]:.s 8%^W<.Y template<typename T1>
r%%< static bool test(T1*& ptr) {
qino:_g T* t = dynamic_cast<T*> (ptr);
N0UZ%,h\ return t != 0;
u{|^5%) }
QVWUm! +aRHMH template<typename T1>
0Yfz?:e static const T* get(const T1*& ptr) {
j Ysg'Rl const T* t = dynamic_cast<const T*> (ptr);
I =nvL return t;
nLnzl }
'#CYw=S+ PfJfa/#pA template<typename T1>
&p.7SPQ8/ static T*& get(T1*& ptr) {
)Z63 cr/ return dynamic_cast<T*> (ptr);
els71t - }
DcEGIaW };
ivPX_#QI _6C,w`[[6 #endif /* TYPEUTILS_H_ */
T_~xDQ` v CMHg]la Q Q: 570508473
=v~$&@ 邮 件:
athzhang@gmail.com @<44wMp 电 话:(0512) 55253348,(0) 18912671348
Z^GXKOeq 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
h($Jo