一个简易的类型判别器 0{ R=9wcc 'uEl~> l7 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Y:a]00&)#Y `PH{syz 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
?FcAXA/J{ 代码: 全选/*
h.t-`k7 * File: TypeUtils.h
rw
#$lP * Author: kwarph [
kwarph@gmail.com ]
!C:$?oU * Time: 2009-3-21 下午03:25:02
=rX>.P%Q 5 *
n.0fVV-A * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
')3
bl3: */
OI*Xt` G'A R`"F #ifndef TYPEUTILS_H_
XOS[No~ #define TYPEUTILS_H_
d/DB nZN ~Jz6O U*z template<typename T>
3$9W%3 struct InstanceOf {
kPLxEwl [IhYh<i template<typename T1>
TWFr
4- static bool test(const T1*& ptr) {
LSr]S79N1 const T* t = dynamic_cast<const T*> (ptr);
"LTad`]<Ro return t != 0;
"a U
aotx }
6 ~w@PRy 9;-p'C template<typename T1>
yaH
Zt`Y static bool test(T1*& ptr) {
SI-Ops~e T* t = dynamic_cast<T*> (ptr);
>I&5j/&}+ return t != 0;
I9hK }D }
JnM["Q=` V33T+P~j template<typename T1>
w&T9;_/ static const T* get(const T1*& ptr) {
A2jUmK.& const T* t = dynamic_cast<const T*> (ptr);
v
z '&%( return t;
^3L0w}# }
YteO6A;
Z}Ft:7 template<typename T1>
VS8Rx.? static T*& get(T1*& ptr) {
#'9HU2 return dynamic_cast<T*> (ptr);
F@B]et7 }
b!5~7Ub.No };
Zba2d,8/ O[JL+g4
#endif /* TYPEUTILS_H_ */
;@Y;g(bw: ]|PiF+ Q Q: 570508473
-z%^)VE 邮 件:
athzhang@gmail.com %aVq+kC h 电 话:(0512) 55253348,(0) 18912671348
VQ9/Gxdeo 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
D7Q$R:6|