一个简易的类型判别器 V@6,\1#`| .32]$vx 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
A1`y_
Aj =<nx[J 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
7VWq8FH` 代码: 全选/*
5c*kgj:x * File: TypeUtils.h
8Io--Ew3 * Author: kwarph [
kwarph@gmail.com ]
[wS~. * Time: 2009-3-21 下午03:25:02
6 Fz?'Xf *
G:TM k4 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
]oy>kRnb { */
wm>I;|gA) ZuV/!9qU #ifndef TYPEUTILS_H_
e RiP C #define TYPEUTILS_H_
,A`.u \f(: qF9z@a template<typename T>
04eE\%? struct InstanceOf {
"5 \<. $f`\TKlN template<typename T1>
mx`C6G5 static bool test(const T1*& ptr) {
4c"x&x| const T* t = dynamic_cast<const T*> (ptr);
h`X>b/V return t != 0;
;{xk[fm= }
N;4tvWI C^sHj5\( template<typename T1>
")%)e ;V3 static bool test(T1*& ptr) {
&gdtI T* t = dynamic_cast<T*> (ptr);
U&W{;myt return t != 0;
y_bb//IAG }
o#wDA0T 6ybpPls template<typename T1>
SF?Ublc! static const T* get(const T1*& ptr) {
[UqJ3@> const T* t = dynamic_cast<const T*> (ptr);
L`v7|! X return t;
*aKT&5Ch- }
g]B!
29M 0<3)K[m~H template<typename T1>
|)4Fe/!cJ static T*& get(T1*& ptr) {
R2ue kpP return dynamic_cast<T*> (ptr);
R0>GM`{ }
1\GS"4~P };
e
C\;n di^E8egR$ #endif /* TYPEUTILS_H_ */
j. 1@{H ` drds Q Q: 570508473
p$r=jF& 邮 件:
athzhang@gmail.com ~";GH20 电 话:(0512) 55253348,(0) 18912671348
m0XdIC]s 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
cuenDw=eC