一个简易的类型判别器 Z@J.1SaB <4mQ*6 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
f0oek{ Kx6y"
{me| 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
R8<eN9bJ9 代码: 全选/*
iV
hJH4 * File: TypeUtils.h
SxMj,u%X/ * Author: kwarph [
kwarph@gmail.com ]
o6|-=FcvC * Time: 2009-3-21 下午03:25:02
0H:dv:#WAI *
HXks_ix ) * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
R]QpMj%o */
C5n?0I9 ',mW`ZN #ifndef TYPEUTILS_H_
S()Za@ [a$ #define TYPEUTILS_H_
s[c^"@HT )+Y&4Qu template<typename T>
hI~SAd
,#A struct InstanceOf {
!k<:k
"7 o4)hxs template<typename T1>
TnE+[.Qu static bool test(const T1*& ptr) {
/F~X,lm*~ const T* t = dynamic_cast<const T*> (ptr);
+R[4\ hC0Y return t != 0;
oJY[{-qW }
#@Y/{[s|@ &
_K*kI: template<typename T1>
]d'^Xs static bool test(T1*& ptr) {
K/Y Agg T* t = dynamic_cast<T*> (ptr);
BUC,M:J+H return t != 0;
z $6JpG }
C6@t T[.[
g/` template<typename T1>
QzthTX< static const T* get(const T1*& ptr) {
.>]N+:O const T* t = dynamic_cast<const T*> (ptr);
OVs wt return t;
R^P_{_I*" }
8$}OS- Oif,|: template<typename T1>
#*,sa static T*& get(T1*& ptr) {
:oa9#c`L return dynamic_cast<T*> (ptr);
(5`T+pAsV }
N z~"vi(t };
AcC8)xRpk4 /f3m)pT #endif /* TYPEUTILS_H_ */
#`/QOTnm2c @ {}rG8 Q Q: 570508473
3jPB#%F 邮 件:
athzhang@gmail.com >oqZ !V5[ 电 话:(0512) 55253348,(0) 18912671348
|}S1o0v{(a 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
t26ij`V