一个简易的类型判别器 G}1?lO_d` UELni,$ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
#L[-WC]1y fC>3{@h}* 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
<k)@PAV 代码: 全选/*
//63?s+ * File: TypeUtils.h
1:]iV}OFqR * Author: kwarph [
kwarph@gmail.com ]
YEF|SEon0 * Time: 2009-3-21 下午03:25:02
_:ypPRJ *
R/8>^6 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
U$o\?4 */
%/KN-* <Z%iP{ #ifndef TYPEUTILS_H_
AfmGA9 #define TYPEUTILS_H_
pC 5J
'@ }HB)%C50. template<typename T>
C%8nr8po struct InstanceOf {
>5C|i-HX $
2'AY template<typename T1>
`$j"nP F_ static bool test(const T1*& ptr) {
u^H: z0 const T* t = dynamic_cast<const T*> (ptr);
S2nF13u return t != 0;
sM)qzO2wh }
:#8#tLv ~~eR,HYk template<typename T1>
,c#IxB/0 static bool test(T1*& ptr) {
T_ifDQX; T* t = dynamic_cast<T*> (ptr);
icW?a9 b& return t != 0;
kfER }
L~N<<8?\ ]O
Nf;RH template<typename T1>
L}O_1+b static const T* get(const T1*& ptr) {
t}LV[bj1u const T* t = dynamic_cast<const T*> (ptr);
g3~e#vdz return t;
rZ<n0w }
S;DqM;Q )-$Od2u2c template<typename T1>
kL;sA'I:S static T*& get(T1*& ptr) {
[4uTp[U!r return dynamic_cast<T*> (ptr);
<4,hrx&. }
;WX)g&19x };
L{fKZ r )8[LN- #endif /* TYPEUTILS_H_ */
`I+G7KK vt0XCUnK Q Q: 570508473
{KJ !rT 邮 件:
athzhang@gmail.com 6 R}]RuFQ 电 话:(0512) 55253348,(0) 18912671348
JSXudz5c 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
HO ,z[6