一个简易的类型判别器 K9FtFd J9^RP~>bs 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
P`HE3?r DWep5$>&K 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
.~0A*a 代码: 全选/*
'&5A*X]d * File: TypeUtils.h
I
U/HYBJH * Author: kwarph [
kwarph@gmail.com ]
U:eahK * Time: 2009-3-21 下午03:25:02
vcsi@! *
00'R1q4 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
C+-xC~ */
8$3G c"= m'$]lf;* #ifndef TYPEUTILS_H_
%|[+\py$Q #define TYPEUTILS_H_
7WG"_A~V Zqke8q template<typename T>
:qi"I;=6 struct InstanceOf {
D+/27# tY<D\T template<typename T1>
rrei6$H& static bool test(const T1*& ptr) {
F4i
c^F{K const T* t = dynamic_cast<const T*> (ptr);
4r!8_$fN?G return t != 0;
]3<k>? }
<qs>c<Vj =$UDa`}D template<typename T1>
Kw}-<y static bool test(T1*& ptr) {
4,kT4_&, T* t = dynamic_cast<T*> (ptr);
08&DP^NS return t != 0;
N^A&DrMF }
/#M|)V*wn *P&ZE template<typename T1>
Hq h static const T* get(const T1*& ptr) {
*p{wC
r const T* t = dynamic_cast<const T*> (ptr);
8Letpygm return t;
WRQJ6B }
Vd[[< r{.DRbn template<typename T1>
Wa%Zt*7 static T*& get(T1*& ptr) {
m/sAYF" return dynamic_cast<T*> (ptr);
<4,>`#NEo }
l|[cA}HtB };
a_/\. KwOn<0P #endif /* TYPEUTILS_H_ */
dV<|ztv bNR}Mk]? Q Q: 570508473
~HsPYc8Fz 邮 件:
athzhang@gmail.com .,[zI@9 电 话:(0512) 55253348,(0) 18912671348
;w@PnY 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
A/Kw"l>