一个简易的类型判别器 nV:LqF= $m1z-i;/ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
S4Ww5G?. &*G#H~\ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
>kp?vK;'B 代码: 全选/*
\GZM&Zd * File: TypeUtils.h
QPg8;O * Author: kwarph [
kwarph@gmail.com ]
fNt`?pWH * Time: 2009-3-21 下午03:25:02
{~sDYRX *
~SF<,-Kg * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
I3mGo */
lXiKY@R# P5nO78 #ifndef TYPEUTILS_H_
]?
g@jRs #define TYPEUTILS_H_
ua]o6GlO ve/<=IR
Zo template<typename T>
SB|Qa}62 struct InstanceOf {
e`TH91@ ,\ k(x>oy template<typename T1>
4.=3M static bool test(const T1*& ptr) {
Vq\`+&A const T* t = dynamic_cast<const T*> (ptr);
S` ;?z return t != 0;
X/2&!O }
>eB\(EP F,MO@&ue" template<typename T1>
^T$|J;I static bool test(T1*& ptr) {
RBm ;e0 T* t = dynamic_cast<T*> (ptr);
vUU9$x return t != 0;
*q".-u!D[ }
<|+Ex 0#&5.Gr) template<typename T1>
[uq$5u static const T* get(const T1*& ptr) {
V'T ,4 const T* t = dynamic_cast<const T*> (ptr);
7=WT69,& return t;
(>GK\=:< }
`[)YEgs %i-c0|,T4 template<typename T1>
b6F4>@gjg static T*& get(T1*& ptr) {
^1aAjYFn return dynamic_cast<T*> (ptr);
T'&I{L33Y }
@zz1hU };
r1LViK $!(pF #endif /* TYPEUTILS_H_ */
Jjv=u lBTmx(_}}r Q Q: 570508473
7:3$Ey 邮 件:
athzhang@gmail.com Z2='o_c 电 话:(0512) 55253348,(0) 18912671348
@I/]D6
~" 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
"zRoU$X