一个简易的类型判别器 ^g*2jH+ 4XsKOv 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
62z"cFN h]#bPb 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
A]CO
Ysc 代码: 全选/*
eWwI@ASaA * File: TypeUtils.h
`PeWV[? * Author: kwarph [
kwarph@gmail.com ]
*kWrF* )J * Time: 2009-3-21 下午03:25:02
B:QAG *
uZ7~E._ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
X4}Lg2ts */
,T3_*:0hk! y|E{] #ifndef TYPEUTILS_H_
Ah<6m5+ #define TYPEUTILS_H_
Q)b*;
@ CkA
~'&C template<typename T>
4Js9"<w struct InstanceOf {
[MVG\6Up( #.z`clK# template<typename T1>
YQk<1./}I static bool test(const T1*& ptr) {
}^Kye23 const T* t = dynamic_cast<const T*> (ptr);
Kv26rY8Q return t != 0;
v3{[rK} }
h(VF p 6FPdt) template<typename T1>
K,\Bj/V( static bool test(T1*& ptr) {
rxJWU JMxK T* t = dynamic_cast<T*> (ptr);
}n91aE3v return t != 0;
;wkoQ8FD9 }
fooQqWC) G>fJ)A template<typename T1>
yxU??#v|g static const T* get(const T1*& ptr) {
-U/m const T* t = dynamic_cast<const T*> (ptr);
".R5K ? return t;
#aV2+ `d }
s=xJcLA 4 9zOhG
| template<typename T1>
{_i.IPp~ static T*& get(T1*& ptr) {
|p7k2wzN return dynamic_cast<T*> (ptr);
h"~GaI }
R0!qweGi@ };
7iJ=~po:o 7f9i5E1 #endif /* TYPEUTILS_H_ */
/K./k!'z M)oJ06`K Q Q: 570508473
!@<>S>uGG 邮 件:
athzhang@gmail.com >nL9%W}8M 电 话:(0512) 55253348,(0) 18912671348
`*nK@: 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
rZBOWT