一个简易的类型判别器 i7s\CY j/'
g$ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
=hhvmo tUv3jq)n% 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
2qXo{C3 代码: 全选/*
k}s+ca!B * File: TypeUtils.h
;AJ<
LC * Author: kwarph [
kwarph@gmail.com ]
Z/c_kf[ * Time: 2009-3-21 下午03:25:02
T5q-"W6\ *
r,"7%1I * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
:$2Yg[Zc3 */
#h{Nz/h+ r@Nl2 #ifndef TYPEUTILS_H_
bs P6\'\4 #define TYPEUTILS_H_
ZMJ3NN]F ydup)[n template<typename T>
{lMqcK struct InstanceOf {
2+Zti8 UO1$UF!
QC template<typename T1>
k% NrL@z static bool test(const T1*& ptr) {
L20rv:W$h const T* t = dynamic_cast<const T*> (ptr);
-$9~xX return t != 0;
yfC2^#9 Zu }
*F|+2?a:$ RAwk7F3qn template<typename T1>
nzWQQra|? static bool test(T1*& ptr) {
NnP.k7m) T* t = dynamic_cast<T*> (ptr);
s6/cL|Ex return t != 0;
#\<P]<C }
)WmZP3$^TX 1\IZcJ { template<typename T1>
{6:&
%V static const T* get(const T1*& ptr) {
3;A$<s const T* t = dynamic_cast<const T*> (ptr);
nd;O(s; return t;
kU1 %f
o }
7JS#a=D# &urb!tQ>& template<typename T1>
gW}} 5Xq static T*& get(T1*& ptr) {
eVrNYa1>H return dynamic_cast<T*> (ptr);
(rIXbekgB }
JSRg?p\ };
v4D!7t&v" s.KOBNCFa #endif /* TYPEUTILS_H_ */
/k)
NP d=F)y~&' Q Q: 570508473
L\YZT|
K( 邮 件:
athzhang@gmail.com %UBPoq 电 话:(0512) 55253348,(0) 18912671348
O"8 P#Ed 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
wR(ttwxK3