一个简易的类型判别器 pNr3u YMad]_XOP 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
%Y:'5\^lC >Be PE(k 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
8 wQV^G 代码: 全选/*
+Vt@~Z4K * File: TypeUtils.h
O*rKV2\ * Author: kwarph [
kwarph@gmail.com ]
rPkV=9ull, * Time: 2009-3-21 下午03:25:02
bV|:MW<Wv *
<_8\}! * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
' ~ lC85 */
;2@MPx {-J/
<a@ #ifndef TYPEUTILS_H_
Wk$[;>NU3 #define TYPEUTILS_H_
T/MbEqAf 6cVaO@/( template<typename T>
e(x1w&8dB struct InstanceOf {
/cexd_l|f yAG4W[ template<typename T1>
:)t1>y>3 static bool test(const T1*& ptr) {
Qr1%"^4 const T* t = dynamic_cast<const T*> (ptr);
? QwDV` return t != 0;
Fl]$ql
}
:e ?qm7 cB Yq4_ss'nB template<typename T1>
kM*f9x static bool test(T1*& ptr) {
,'m<um T* t = dynamic_cast<T*> (ptr);
oOBN return t != 0;
lLxKC7b }
cgc|G .1.n{4z>: template<typename T1>
0vQ@n7 static const T* get(const T1*& ptr) {
fOm=#:O const T* t = dynamic_cast<const T*> (ptr);
v)!Rir5 return t;
j!iimdq }
rr'RX w'~f Z* template<typename T1>
pq#Hca[ static T*& get(T1*& ptr) {
> YKvwbCf8 return dynamic_cast<T*> (ptr);
fI`6]?W }
Ti#2D3 };
,E$^i~OO 4&!`Yi_1L #endif /* TYPEUTILS_H_ */
}I}Rq D:` x,@cU}D Q Q: 570508473
Jj*XnL* 邮 件:
athzhang@gmail.com [m?eSq6e2b 电 话:(0512) 55253348,(0) 18912671348
{[61LQ6V9 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
UMpC2)5