一个简易的类型判别器 ?,Xw[pR b6M[q_ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
B
IEO,W| HWAdhDZ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
m@j?za9s 代码: 全选/*
M^Yh|%M * File: TypeUtils.h
ja'T+!k * Author: kwarph [
kwarph@gmail.com ]
,,.QfUj/& * Time: 2009-3-21 下午03:25:02
6-
YU[HF *
ZoqZap6e * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
P[-E@0h)-t */
{W`%g^Z|H _ye |Y #ifndef TYPEUTILS_H_
/N+dQe #define TYPEUTILS_H_
@7c?xQVd$ mIvx1_[ template<typename T>
"{+QW struct InstanceOf {
#MkTkm&r N% B>M7-= template<typename T1>
wu6;.xTLl static bool test(const T1*& ptr) {
Paq4 const T* t = dynamic_cast<const T*> (ptr);
2qNt,;DQ return t != 0;
$Wol?)z }
MY)O^I X$ r6Dz;uz template<typename T1>
rKc9b<Ir static bool test(T1*& ptr) {
s^TZXCyF o T* t = dynamic_cast<T*> (ptr);
Wi<m{.%\E return t != 0;
=s{> Fsm1 }
*Q.>-J<S l'1pw template<typename T1>
~/U1xk% static const T* get(const T1*& ptr) {
[aLI
' const T* t = dynamic_cast<const T*> (ptr);
@bLy,Xr& return t;
}#+^{P3 ; }
}&D WaO]J7 {WS;dX4 template<typename T1>
0> E r=,e static T*& get(T1*& ptr) {
rXq.DvQ return dynamic_cast<T*> (ptr);
c#]4awHU }
3`?7<YJ };
T<>,lQs(a .43'HV #endif /* TYPEUTILS_H_ */
Y-z(zS^1 \l0[rcEf Q Q: 570508473
=%O6:YM
邮 件:
athzhang@gmail.com {fM'6;ak 电 话:(0512) 55253348,(0) 18912671348
~=LE0. 3[ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
W
i.&e