一个简易的类型判别器 dI
ZTLb"a VVQ74b 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
-6~dJTm[t 4}8+)Pd 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
-m'3L7: 代码: 全选/*
jdg
~!<C * File: TypeUtils.h
E#{WU} * Author: kwarph [
kwarph@gmail.com ]
i3 l #~ * Time: 2009-3-21 下午03:25:02
[mB(GL *
KB,~u*~! * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
tY$ty0y-e */
]k`Fl," 4'{hI;&a& #ifndef TYPEUTILS_H_
3^A/`8R7K #define TYPEUTILS_H_
,F?~'-K 28Ssb| template<typename T>
;x3 ]4^ struct InstanceOf {
J<($L}T*$ nhQ44qRgQ template<typename T1>
AeY$.b static bool test(const T1*& ptr) {
%is,t<G const T* t = dynamic_cast<const T*> (ptr);
ny return t != 0;
3dX=xuQ%/ }
o9T@uWh+ & GzhcW~ template<typename T1>
@RoRNat static bool test(T1*& ptr) {
0(hv #C4 T* t = dynamic_cast<T*> (ptr);
17n+4J] return t != 0;
PK2Rj% }
pRiH,:\ Xv-1PY':pA template<typename T1>
UE&C static const T* get(const T1*& ptr) {
pRrqs+IJZ\ const T* t = dynamic_cast<const T*> (ptr);
zh{@?k return t;
l)i&ATvCE }
Q/3tg *_{l template<typename T1>
5v!DYx static T*& get(T1*& ptr) {
]w_ return dynamic_cast<T*> (ptr);
Ukh$`q} }
ER;lkF`RF };
/H%<oAjp6 3I;xU(rv #endif /* TYPEUTILS_H_ */
a* W_fxb %<=w [*i Q Q: 570508473
.o\;,l2 邮 件:
athzhang@gmail.com \`P2Yq 电 话:(0512) 55253348,(0) 18912671348
clq~ ;hx 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
DYT@BiW{