一个简易的类型判别器 6jPaS!E {~b]6}O 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
j05ahquI im*QaO%a4 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
L.l"'=M 代码: 全选/*
V<:kS * File: TypeUtils.h
3`SLMPI * Author: kwarph [
kwarph@gmail.com ]
*~prI1e( * Time: 2009-3-21 下午03:25:02
hk}M' *
H8Pil H * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
rAn''X6H */
r_FW)F u^ 9]1-J5iO #ifndef TYPEUTILS_H_
wb"Jj #define TYPEUTILS_H_
8kH'ai T>kJB.V:oQ template<typename T>
cV&(L]k>` struct InstanceOf {
Itj|0PGd >fdS$,`A template<typename T1>
w_/q5]/V-5 static bool test(const T1*& ptr) {
FL(gwfL const T* t = dynamic_cast<const T*> (ptr);
&p=|z2 J return t != 0;
F!c%&Z }
x>&1;g2r TnPd pynP template<typename T1>
HPVT$EJ static bool test(T1*& ptr) {
.7+_ubj&, T* t = dynamic_cast<T*> (ptr);
wV W+~DJ return t != 0;
(ai E!c }
42U3> \1aj!) template<typename T1>
VskyRxfdW3 static const T* get(const T1*& ptr) {
xg. d)n const T* t = dynamic_cast<const T*> (ptr);
1a/@eqF'' return t;
|~8iNcIS }
~Jp\'P7* 8
E.u3eS template<typename T1>
7I(Sa?D: static T*& get(T1*& ptr) {
+3]@0VM26; return dynamic_cast<T*> (ptr);
N%_-5Q)so }
-t:yy:4 };
JAmv 7GL'6 76zi)f1f #endif /* TYPEUTILS_H_ */
&q``CCOF& %mtW-drv> Q Q: 570508473
)nQpO"+M 邮 件:
athzhang@gmail.com @6h=O`X> 电 话:(0512) 55253348,(0) 18912671348
"%qGcC8 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
A}H)ojG'v