一个简易的类型判别器 wOf8\s1 /9pxEidVAS 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
(I~
WwB_L.{ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
VO0:4{- 代码: 全选/*
:(A&8<}-6 * File: TypeUtils.h
f8;?WSGyD2 * Author: kwarph [
kwarph@gmail.com ]
OInl?_,,T# * Time: 2009-3-21 下午03:25:02
m54>} *
B$g\;$G * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
~P'.R.e */
"OenYiz wY<s #ifndef TYPEUTILS_H_
C][$0 #define TYPEUTILS_H_
v*!N}1+J G?}?>O template<typename T>
ZPH_s^ struct InstanceOf {
#KiJ{w' =6~ template<typename T1>
fn,n'E] static bool test(const T1*& ptr) {
23tX"e const T* t = dynamic_cast<const T*> (ptr);
." xP{ return t != 0;
d3c.lD)L9 }
O]tR~a 9K@I template<typename T1>
a>OYJe static bool test(T1*& ptr) {
1L!;lP2 T* t = dynamic_cast<T*> (ptr);
><}nZ7 return t != 0;
5[4wN(
) }
;}SGJ7 3/+kjY/ template<typename T1>
~pZ0B#K
J static const T* get(const T1*& ptr) {
I#2$CSJ const T* t = dynamic_cast<const T*> (ptr);
s>/Xb2\ return t;
b WNa6x }
g)#?$OhP" )Dz]Pv]H' template<typename T1>
*F1TZ_GS static T*& get(T1*& ptr) {
j{Px}f(= return dynamic_cast<T*> (ptr);
C7dq=(p& }
ycBgr,Ynu< };
F- -g?Q^ s;I
@En #endif /* TYPEUTILS_H_ */
bN/8 ~! B{)#A?Rh. Q Q: 570508473
Da 7(jA+ 邮 件:
athzhang@gmail.com 5a/A?9?, 电 话:(0512) 55253348,(0) 18912671348
P*!`AWn 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
(B4)L%