一个简易的类型判别器 M@^U0
? p~bkf> 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
AQci,j" $ly0h W 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
}~*rx7p 代码: 全选/*
lvufk VG| * File: TypeUtils.h
XN;/nU * Author: kwarph [
kwarph@gmail.com ]
pVOI5>f\ * Time: 2009-3-21 下午03:25:02
?*K<*wBw# *
v'nHFC+p * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
i f@W
]% */
iUNnPJh aW@oE
~` #ifndef TYPEUTILS_H_
PqhlXqX9 #define TYPEUTILS_H_
VBx,iuaw 8t9aHla template<typename T>
Y(GW0\< struct InstanceOf {
SLA#= K >}F? <JB template<typename T1>
L<@&nx static bool test(const T1*& ptr) {
$'$>UFR const T* t = dynamic_cast<const T*> (ptr);
R|t;p!T return t != 0;
!P" ? }
Gj`f--2GE Ve14rn template<typename T1>
%vc'{`P static bool test(T1*& ptr) {
^W['A]l T* t = dynamic_cast<T*> (ptr);
MxN]7 return t != 0;
A[ 1)!e }
~_}4jnC J<_ 1z':W) template<typename T1>
XZ@>]P static const T* get(const T1*& ptr) {
R`C.ha const T* t = dynamic_cast<const T*> (ptr);
^I./L)0=} return t;
X RRJ)}P }
>q &L/N5 fm6]CU1^ template<typename T1>
l\U*sro< static T*& get(T1*& ptr) {
;qT5faKB3J return dynamic_cast<T*> (ptr);
`GkRmv* }
M+UMR+K };
kh&_#, *eoq=,O #endif /* TYPEUTILS_H_ */
-4`sqv ] 2))t*9;h Q Q: 570508473
KW:r;BFx 邮 件:
athzhang@gmail.com y<uE-4 电 话:(0512) 55253348,(0) 18912671348
x9\J1\ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
J=L`]XE