一个简易的类型判别器 q@sH@-z4] os.x|R]_ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
f2u2Ns0Ym MMAC,4 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
[T%blaSX 代码: 全选/*
6wd]X-G++ * File: TypeUtils.h
4bBxZY * Author: kwarph [
kwarph@gmail.com ]
^0&] .m * Time: 2009-3-21 下午03:25:02
MYPcH\K$h *
sWC"^ S o * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
-Fdi,\e */
UZ!hk*PF bGJUu# #ifndef TYPEUTILS_H_
\nHlI=!P #define TYPEUTILS_H_
%PS-nF7v LF~#4)B
template<typename T>
B1M/5cr. struct InstanceOf {
3k<#;( gQEV;hCO template<typename T1>
nKO&ffb'< static bool test(const T1*& ptr) {
=c,gK8C const T* t = dynamic_cast<const T*> (ptr);
U %ESuq# return t != 0;
DPwSg\*) }
TUaK:*x* }$)<k template<typename T1>
*X\c
$=* static bool test(T1*& ptr) {
z~H Gc"~ T* t = dynamic_cast<T*> (ptr);
KVR}Tp/R return t != 0;
(<l2 ^H }
6.|~~/ _}&]`,s> template<typename T1>
nIjQLx static const T* get(const T1*& ptr) {
p4'"Wk8 const T* t = dynamic_cast<const T*> (ptr);
!Ia"pNDf return t;
_@N)]!\MgP }
kYB
<FwwB !_9$[Oq~ template<typename T1>
YBD {l static T*& get(T1*& ptr) {
8zC k9& return dynamic_cast<T*> (ptr);
,}tdfkZFYl }
S=}~I };
:\U3bkv+ x+cF1N2. #endif /* TYPEUTILS_H_ */
|T_Pz&- |y%].y) Q Q: 570508473
rcZ SC3 邮 件:
athzhang@gmail.com rk/
c 电 话:(0512) 55253348,(0) 18912671348
358/t/4{p 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
-o_TC