一个简易的类型判别器 tDuUAI54 TA-(_jm 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
CIxVR DLg `Q0`M5 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
tXb7~aO 代码: 全选/*
`gBXeG2fn * File: TypeUtils.h
a3(7{,Ew * Author: kwarph [
kwarph@gmail.com ]
*h5ld P * Time: 2009-3-21 下午03:25:02
Occ8Hk/l. *
!)l%EJngL * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
z_[3IAZ */
nEZ-h7lzl( q:D0$YY0 #ifndef TYPEUTILS_H_
Rd@n?qB #define TYPEUTILS_H_
)U/@J+{{ NL>[8# template<typename T>
lN=m$ J struct InstanceOf {
~8n~4 GFy0R"&d[ template<typename T1>
T[8"u<O96 static bool test(const T1*& ptr) {
\V!X& a const T* t = dynamic_cast<const T*> (ptr);
MU^xu&MB return t != 0;
Fc{6*wtO }
[/#k$- {TcbCjyw template<typename T1>
4BUK5)B static bool test(T1*& ptr) {
iJynR [7 T* t = dynamic_cast<T*> (ptr);
pyb}ha return t != 0;
I,`D& }
hj m.Ath (Db*.kd8, template<typename T1>
VUg~[ static const T* get(const T1*& ptr) {
d9Ow 2KrC const T* t = dynamic_cast<const T*> (ptr);
!_/8!95 return t;
y 1jGf83 }
t"Vr;0!{ 41+E U Mc template<typename T1>
fSQ3 :o static T*& get(T1*& ptr) {
fv 1!^CDia return dynamic_cast<T*> (ptr);
[(.T%kJ }
VQW)qOR9 };
\Kzt*C-ZH 4d3]pvv #endif /* TYPEUTILS_H_ */
si"mM>e 4'4s EjyA Q Q: 570508473
b6E8ase:F 邮 件:
athzhang@gmail.com d8y=. 电 话:(0512) 55253348,(0) 18912671348
Kt&$Si 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
0Ts_"p