一个简易的类型判别器 n21J7;\/+ x7?{*w&r 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
}0G Ab2 -tQ|&fl 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
7@?b _ 代码: 全选/*
tDo0Q/` * File: TypeUtils.h
;+U9; * Author: kwarph [
kwarph@gmail.com ]
T_WQzEL^ * Time: 2009-3-21 下午03:25:02
n C^'2z *
*$!LRmp? * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
'\Ub*m((1O */
d,)L, J F`u~Jx8.* #ifndef TYPEUTILS_H_
y(k2p #define TYPEUTILS_H_
O]>`B{ C0RwW??t template<typename T>
%}[??R0 struct InstanceOf {
kXWx )v $u :=lA:N template<typename T1>
/L.a:Er$ static bool test(const T1*& ptr) {
ZE^de(Fm const T* t = dynamic_cast<const T*> (ptr);
p98lu'?@ return t != 0;
& \m\QI }
xph60T he Wb(E& template<typename T1>
,l6W|p?ZO^ static bool test(T1*& ptr) {
KB5{l%> T* t = dynamic_cast<T*> (ptr);
r!S iR( return t != 0;
o2~x'*A0I }
w9%gaK; WxFjpJt
template<typename T1>
Z=|@76 static const T* get(const T1*& ptr) {
~#@EjQCq const T* t = dynamic_cast<const T*> (ptr);
LjH];=R return t;
ZeO>Ag^ }
D fea<5~^z `4CRpz template<typename T1>
:.cX3dP@ static T*& get(T1*& ptr) {
/ @&Sqv4? return dynamic_cast<T*> (ptr);
i,'~Ds }
yrjm0BM# };
IQDWH/c |Xag:hof #endif /* TYPEUTILS_H_ */
UTPl7po5D bA)Xjq)Rr Q Q: 570508473
^?2txLv,6 邮 件:
athzhang@gmail.com { at;
U@o 电 话:(0512) 55253348,(0) 18912671348
/y 0 )r.R 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
VV