一个简易的类型判别器 :eHD{= WA'4y\ N 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
4?eO1=a cx+w_D9b! 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
.~3s~y*s 代码: 全选/*
$*k(h|XfwW * File: TypeUtils.h
NY(z3G * Author: kwarph [
kwarph@gmail.com ]
)># Y,/q * Time: 2009-3-21 下午03:25:02
Re[x$rw *
6 b/UFO * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
$m
hIXA. */
yW=I*f rnOg;|u8 #ifndef TYPEUTILS_H_
0fOx&"UAB #define TYPEUTILS_H_
^<$$h /JcfAY template<typename T>
/m"#uC!\ struct InstanceOf {
/
5\gP//9K \]:}lVtxS template<typename T1>
9~rrN60Q static bool test(const T1*& ptr) {
l_q=@y const T* t = dynamic_cast<const T*> (ptr);
T"bH{|:%*= return t != 0;
LMGo8%2I }
5%6{ ePh{ {M_*hR;lL template<typename T1>
KfPYH\0 static bool test(T1*& ptr) {
{s{bnU T* t = dynamic_cast<T*> (ptr);
c>$PLO^ return t != 0;
hx.ln6=4 }
mm1fG4
*% #9/^)^k template<typename T1>
)%zOq:{\5 static const T* get(const T1*& ptr) {
_8z gaA const T* t = dynamic_cast<const T*> (ptr);
#$dEg return t;
I$y6N"| }
lSG"c+iV 8mc0(Z@ template<typename T1>
*+UgrsRk static T*& get(T1*& ptr) {
xwJ.cy return dynamic_cast<T*> (ptr);
ob_*fP }
{CaTu5\ };
6OPYq*| yQ03&{# #endif /* TYPEUTILS_H_ */
LkwjEJQf *NjjFk=R Q Q: 570508473
svWQk9d 邮 件:
athzhang@gmail.com W1!Nq` 电 话:(0512) 55253348,(0) 18912671348
n5U-D0/Q 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
#,5v#|u|7