一个简易的类型判别器 rx2']. !Z:XSF[T 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
VnsV&cx v
f{{z%3T 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
?PMbbqa0 代码: 全选/*
+`k30-<P * File: TypeUtils.h
[m0X kvd * Author: kwarph [
kwarph@gmail.com ]
3<
?+Yhq * Time: 2009-3-21 下午03:25:02
>bf.T7wy *
mW%8`$rVEO * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
F6[F~^9D */
uW!XzX[' MmjZq #ifndef TYPEUTILS_H_
lxL.ztL #define TYPEUTILS_H_
^%9oeT{ ?QT6q]|d0+ template<typename T>
=eQB-Xe8Y struct InstanceOf {
N:| :L:<1 %}9tU>?F# template<typename T1>
"Bf8mEmp static bool test(const T1*& ptr) {
/_qq(,3 const T* t = dynamic_cast<const T*> (ptr);
r3g^0|) return t != 0;
Ia#!T"]@W6 }
FHr)xqo=~ /o;L,mcx* template<typename T1>
I!Z`'1" static bool test(T1*& ptr) {
3?*dv14 T* t = dynamic_cast<T*> (ptr);
~k?rP}>0 return t != 0;
05FGfnq.8 }
S"h;u=5it r$={_M$ template<typename T1>
JFm@jc static const T* get(const T1*& ptr) {
c}qpmW F const T* t = dynamic_cast<const T*> (ptr);
ZDFq=)0C return t;
CXuD%H]tx }
Yn~fnI{ c{/R?< template<typename T1>
Z2$_9. static T*& get(T1*& ptr) {
`;6M|5G return dynamic_cast<T*> (ptr);
?CQE6ch }
_f%s] };
/@ @F
nQ++ M
co:eE #endif /* TYPEUTILS_H_ */
;pW8a? M[mYG _{J Q Q: 570508473
|"SZpx 邮 件:
athzhang@gmail.com +QFKaS<sn 电 话:(0512) 55253348,(0) 18912671348
!+PrgIp> 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
ISpV={$Zd