一个简易的类型判别器 ZU^Q1}</5 (V^QQ !: 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
* T\> $uTlbAuv 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
h+
TB] 代码: 全选/*
&
]%\.m * File: TypeUtils.h
-YAO3 * Author: kwarph [
kwarph@gmail.com ]
n4XMN\:g{ * Time: 2009-3-21 下午03:25:02
B*BHF95! *
'iGMn_& * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
mR6E]TuM */
P69>gBZYD s|KfC># #ifndef TYPEUTILS_H_
D~7%};D[ #define TYPEUTILS_H_
y#nSk%"t" y!BB7cK6 template<typename T>
n<+~ zQ struct InstanceOf {
=^"~$[z( k~ZBJ+
94 template<typename T1>
dvxf lLd @ static bool test(const T1*& ptr) {
p0?o<AA%O const T* t = dynamic_cast<const T*> (ptr);
>Ziy1Dp return t != 0;
P)4x }
89ZDOji?O XuA0.b% template<typename T1>
e ^-3etx static bool test(T1*& ptr) {
ScsWnZ T* t = dynamic_cast<T*> (ptr);
^Y#@$c return t != 0;
'|J) ds }
,%.:g65% a?l_-Fi template<typename T1>
!HbqbS22 static const T* get(const T1*& ptr) {
*di&%&f const T* t = dynamic_cast<const T*> (ptr);
.;cxhgU return t;
e|35|I ' }
\}n !yYh( +6wx58.B& template<typename T1>
T R+Q4Y: static T*& get(T1*& ptr) {
SG1&a:c+. return dynamic_cast<T*> (ptr);
?@yank| }
$)4GCP };
)|MIWgfWN Cd$dnHVh #endif /* TYPEUTILS_H_ */
]gjr+GV *c!;^Qy p& Q Q: 570508473
w
5!ndu 邮 件:
athzhang@gmail.com KC#kss 电 话:(0512) 55253348,(0) 18912671348
J,.j_ii`! 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
|qQ{ 8T%)