一个简易的类型判别器 /$\yAOA'y ,[,+ _A 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
.Di+G-#aEs RR{]^g51 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
63UAN0K% 代码: 全选/*
@]6)j& * File: TypeUtils.h
^TVy:5Ag * Author: kwarph [
kwarph@gmail.com ]
<5@+:7Dv * Time: 2009-3-21 下午03:25:02
50rCW)[# *
=bded(3Z * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
J
[2;&-@ */
!-2nIY! Ooc,R( #ifndef TYPEUTILS_H_
Zla5$GM #define TYPEUTILS_H_
i
cQsA lEQ63)Z template<typename T>
J;+tQ8,AP struct InstanceOf {
=R:3J"ly0 '1~mnmiP template<typename T1>
Ayc}uuu static bool test(const T1*& ptr) {
}/x `w const T* t = dynamic_cast<const T*> (ptr);
!O@qqg(> return t != 0;
]d_Id]Qa+ }
_jy*`$"q( !lm^(SSv template<typename T1>
m0paGG static bool test(T1*& ptr) {
Jh{(xGA T* t = dynamic_cast<T*> (ptr);
^TVica return t != 0;
L q'*B9 }
x@m"[u ZL #4X*zT template<typename T1>
\ s`'3y static const T* get(const T1*& ptr) {
#?}k0Y const T* t = dynamic_cast<const T*> (ptr);
yf*MG&} return t;
~ d/Doi }
v#IW;Rj8 $Etf'. template<typename T1>
([_ls8 static T*& get(T1*& ptr) {
@,CCwiF'q return dynamic_cast<T*> (ptr);
=4\|'V15 }
K*'(;1AiW };
"%D+_Yb'X c;Hf +n #endif /* TYPEUTILS_H_ */
$ENA$ F&lWO!4 Q Q: 570508473
6JmS9ho 邮 件:
athzhang@gmail.com ORs<<H.d 电 话:(0512) 55253348,(0) 18912671348
LV0g *ng 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
E$ q/4