一个简易的类型判别器 C^2Tql aHXd1\6m 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
SYw>P1 >IJH#>i 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
(VI4kRj 代码: 全选/*
f*0[[J0] * File: TypeUtils.h
0AZ Vc * Author: kwarph [
kwarph@gmail.com ]
dK#:io[Nz * Time: 2009-3-21 下午03:25:02
bfVKf} *
@v2_gjRe * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
MIsjTKE */
{uM*.] %S.
_3`A #ifndef TYPEUTILS_H_
cE$<6&0 #define TYPEUTILS_H_
H]H*Ouu["e 3T'9_v[Y template<typename T>
N41)?-7F struct InstanceOf {
7s4G|N[wR\ D2# 3fM6 template<typename T1>
yS0!#AG static bool test(const T1*& ptr) {
q3z<v:=1y const T* t = dynamic_cast<const T*> (ptr);
Z]@my,+Z; return t != 0;
Q;*TnVbJ }
rFh!&_ 0>6J - template<typename T1>
`k+ci7; static bool test(T1*& ptr) {
J2f}{! b+I T* t = dynamic_cast<T*> (ptr);
N<zD<q return t != 0;
.D(H@3qA@ }
@>}!g9c mp*&{[XoVC template<typename T1>
p`fUpARA! static const T* get(const T1*& ptr) {
D{x'k2= const T* t = dynamic_cast<const T*> (ptr);
,,sKPj[ return t;
C*a>B,H }
&GGJ=c\ b(Zh$ 86 template<typename T1>
7y5`YJ}! static T*& get(T1*& ptr) {
*39Y1+=)$$ return dynamic_cast<T*> (ptr);
@SjISZw_ }
M4w,J2_8MK };
s /"&k U>H"N1 #endif /* TYPEUTILS_H_ */
M+j V`J! LUc!a4i"fO Q Q: 570508473
5 Tag-+ 邮 件:
athzhang@gmail.com WWhAm{m
电 话:(0512) 55253348,(0) 18912671348
1YV ;pEw3w 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
_C2iP[YwQ{