一个简易的类型判别器 PLDg'4DMg NoS|lT 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
o33wePx, C?6wIdp 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
J#DYZ>}Y 代码: 全选/*
6XyhOs%/ * File: TypeUtils.h
}RX[J0Prq~ * Author: kwarph [
kwarph@gmail.com ]
L&3Ak}sh * Time: 2009-3-21 下午03:25:02
&Rw4ub3 *
ql,k 5.l * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
!yAlb#yu */
0ut/ ')[ ;Awt: jF #ifndef TYPEUTILS_H_
5B3S]@% #define TYPEUTILS_H_
3 @XkO ! 6yoD template<typename T>
0#}Ed Q struct InstanceOf {
$j61IL3+ [@"~'fu0 template<typename T1>
I}JC ~=`j static bool test(const T1*& ptr) {
?Fgk$WqC const T* t = dynamic_cast<const T*> (ptr);
hwkm'$} return t != 0;
po@=$HK }
WW33ZJ vR$[#`X template<typename T1>
'TWZ@8h~ static bool test(T1*& ptr) {
xa+=9=<AQ T* t = dynamic_cast<T*> (ptr);
R;+vE'&CO return t != 0;
??&Q"6Oe }
&2-dZK &DoYz[q template<typename T1>
!{'C.sb?~ static const T* get(const T1*& ptr) {
c#'t][Ii const T* t = dynamic_cast<const T*> (ptr);
Fj? Q4_ return t;
-xg$qvK }
ciRn"X=l KQ0Zy template<typename T1>
!#l>+9 static T*& get(T1*& ptr) {
AD_RU_a9 return dynamic_cast<T*> (ptr);
+"1@6,M }
YlfzHeN1 };
.U.Knn ziUEA>m*/ #endif /* TYPEUTILS_H_ */
S<Z]gY @c y;zp*(}f$h Q Q: 570508473
Fc{M
N" 邮 件:
athzhang@gmail.com )C^ZzmB 电 话:(0512) 55253348,(0) 18912671348
) #G5XS+) 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
' S%?&4