一个简易的类型判别器 |Qpd<L _s:5) 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
];eJ'# ]4'V59\ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
!u/c'ZLZ> 代码: 全选/*
X|4Kdi.r@ * File: TypeUtils.h
mR#"ng * Author: kwarph [
kwarph@gmail.com ]
?5EMDawt * Time: 2009-3-21 下午03:25:02
m!(dk] *
q9\(<<f| * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
DD6K[\ */
_UbyhBl _^$F^}{& #ifndef TYPEUTILS_H_
kkOjAp{<t #define TYPEUTILS_H_
\ >#y*W< zQB1C template<typename T>
n:}'f-
:T struct InstanceOf {
?xwZ< A Y$fF"pG? template<typename T1>
$ dKo} static bool test(const T1*& ptr) {
RF~c/en const T* t = dynamic_cast<const T*> (ptr);
7{V N27Fa_ return t != 0;
:#UA!|nV }
R$"> &O5&pet template<typename T1>
ZfS" static bool test(T1*& ptr) {
`2j"Z.= T* t = dynamic_cast<T*> (ptr);
51;Bc[)% return t != 0;
dd@
D
s }
YdYaLTz VK|$SY( template<typename T1>
,fhwDqR
? static const T* get(const T1*& ptr) {
l\u5RMS(' const T* t = dynamic_cast<const T*> (ptr);
m$g{& return t;
iE]^6i }
yoTx3U@ /1hcw|cfC template<typename T1>
u~Y+YzCxV static T*& get(T1*& ptr) {
S@ItgG?X return dynamic_cast<T*> (ptr);
B"t4{1/ }
!3"Hn
};
("=B,%F_ +('=RyoT #endif /* TYPEUTILS_H_ */
461p 4) -(E-yCu Q Q: 570508473
&hWYw+yH\ 邮 件:
athzhang@gmail.com , lBHA+@ 电 话:(0512) 55253348,(0) 18912671348
99[v/L>F 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
= d !YM6G