一个简易的类型判别器 rT=C/SKP 6.a5%: 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
a0+q^*\d\R ?A3u2- 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
o>nw~_ H\ 代码: 全选/*
/E2P * File: TypeUtils.h
Sa%%3_& * Author: kwarph [
kwarph@gmail.com ]
v%c/eAF * Time: 2009-3-21 下午03:25:02
7M
_
mR Vh *
zRd.!Rv * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
mr/?w0(C */
k6J&4?xZ "dG N0i #ifndef TYPEUTILS_H_
UmvnVmnv #define TYPEUTILS_H_
J<0d"' )HC/J- template<typename T>
ll1N`ke struct InstanceOf {
kYWnaY ^F zc=G4F01 template<typename T1>
c ~~4eia) static bool test(const T1*& ptr) {
0e+#{k const T* t = dynamic_cast<const T*> (ptr);
S~ Z<-@S return t != 0;
)/vom6y* }
!h4A7KBYG :<bhQY template<typename T1>
|O6/p7+. static bool test(T1*& ptr) {
M)!"R [V T* t = dynamic_cast<T*> (ptr);
\b%c_e return t != 0;
*r[V[9+y-D }
y2#"\5dC 0;@>jo6,! template<typename T1>
d/jP2uuA static const T* get(const T1*& ptr) {
(_!I2"Q* const T* t = dynamic_cast<const T*> (ptr);
vb?.`B_>& return t;
9od*N$ }
~c<8;,cjYR S5u$I template<typename T1>
kS&>g static T*& get(T1*& ptr) {
XVqkw@Ia4! return dynamic_cast<T*> (ptr);
U]gUGD!5x }
7M4J{}9 };
9PA<g3z akNqSZwj #endif /* TYPEUTILS_H_ */
^+CWo@. L%(NXSfu7 Q Q: 570508473
Pzq^x] 邮 件:
athzhang@gmail.com 9Q}g
Vqn 电 话:(0512) 55253348,(0) 18912671348
j`"!G*Vh 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
,mHUo4h1O