一个简易的类型判别器 9nu!|reS S|CN)8Jsi 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
\7n ;c
|_xU{Pu 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
r#M0X^4A 代码: 全选/*
+*Y/+.4WE$ * File: TypeUtils.h
zy^t95/m * Author: kwarph [
kwarph@gmail.com ]
jNd."[IrO * Time: 2009-3-21 下午03:25:02
\qj4v^\ *
!VBl/ aU@ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
7:awUoV8f */
O10,h(O >rJ9^rS #ifndef TYPEUTILS_H_
&Azfpv #define TYPEUTILS_H_
1U[Q)(P 'M8wjU template<typename T>
MKMWHGN struct InstanceOf {
6AD#x7drj ,/*L|M/&5 template<typename T1>
&m<:&h& b static bool test(const T1*& ptr) {
T rK-XTev const T* t = dynamic_cast<const T*> (ptr);
jNV)=s^ed[ return t != 0;
!(2rU @. }
c"F3[mrff '9@} =pE template<typename T1>
+OEqDXR+_ static bool test(T1*& ptr) {
rnX
D( T* t = dynamic_cast<T*> (ptr);
.Y`;{) return t != 0;
X$mCn#8m }
0G?*i_u\ $D&N^}alW template<typename T1>
re}_+svU static const T* get(const T1*& ptr) {
N(ov.l; const T* t = dynamic_cast<const T*> (ptr);
A<$~Q;r2a return t;
r2!\Ts 5v }
%#
M=qP :xwyE(w template<typename T1>
T)N_ ~f| static T*& get(T1*& ptr) {
' 5tk0A return dynamic_cast<T*> (ptr);
ZH<:g6 }
e 97Ll=> };
Ov<EOK+^ dC,a~`%O #endif /* TYPEUTILS_H_ */
%)o'9 yzI`&?
P2 Q Q: 570508473
^qR2 !fwm< 邮 件:
athzhang@gmail.com D_s0)|j$cy 电 话:(0512) 55253348,(0) 18912671348
"|k 4<"] 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
{~*^jS']5