一个简易的类型判别器 o<1a]M| aC!e#(q 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
BH`%3Mw 4k$i:st; 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
;dC>$_P? 代码: 全选/*
0cGO*G2Xr * File: TypeUtils.h
b\{34z, * Author: kwarph [
kwarph@gmail.com ]
=`&7pYd, * Time: 2009-3-21 下午03:25:02
:A,g :B *
[nSlkl
* Copyright (C) 2008-2009, kwarph, All Rights Reserved.
mZ%"""X\Ei */
f{i~hVF 2Ra}&ie #ifndef TYPEUTILS_H_
5Q/&,NP #define TYPEUTILS_H_
!UzMuGj p*'%<3ml template<typename T>
Wi;wu* struct InstanceOf {
)Bz2-|\ /5**2Kgv1 template<typename T1>
DJWm7 t static bool test(const T1*& ptr) {
yW=I*f const T* t = dynamic_cast<const T*> (ptr);
!
.q,m>?+ return t != 0;
wP|Amn+; }
SRP.Mqg9 OV~]-5gau template<typename T1>
tVUC@M>' static bool test(T1*& ptr) {
s(2/]f$ T* t = dynamic_cast<T*> (ptr);
vHydqFi 9 return t != 0;
6H]rO3[8 }
?'xwr)v (u_?#PjX template<typename T1>
4+tKg*| static const T* get(const T1*& ptr) {
HpXQD; const T* t = dynamic_cast<const T*> (ptr);
`/e
EdqT return t;
c6 f=r }
^i"~6QYE yG v7^d template<typename T1>
5YV3pFz$) static T*& get(T1*& ptr) {
vk1E!T9X return dynamic_cast<T*> (ptr);
B@+&?%ub: }
og?>Q i Tr };
eb#yCDIC ^Rpy5/d #endif /* TYPEUTILS_H_ */
4uX|2nJ2!; 8\lRP,- Q Q: 570508473
%&Fsk]T%: 邮 件:
athzhang@gmail.com z+5ZUS2~& 电 话:(0512) 55253348,(0) 18912671348
R(^2+mV? 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
7A,lQh