一个简易的类型判别器 }+MA*v[06 pzjNi=vhd 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
8kSyT'kC% ]8OmYU%6V 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
h+!R)q8M 代码: 全选/*
wj0_X;L * File: TypeUtils.h
\p}GW * Author: kwarph [
kwarph@gmail.com ]
k >.U ! * Time: 2009-3-21 下午03:25:02
6C"zBJcGc *
Y1>OhHuN * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
RTbV!I */
_*g.U=u Z8/.I #ifndef TYPEUTILS_H_
_<2{8>EVf #define TYPEUTILS_H_
AB0}6g^O ~.J*_0~Ze template<typename T>
-R1;(n) struct InstanceOf {
gaNe\ uVhzJu. template<typename T1>
B 5qy4MFWs static bool test(const T1*& ptr) {
tI^[|@, const T* t = dynamic_cast<const T*> (ptr);
pRxVsOb return t != 0;
Wi5Dl= }
Isvb;VT9L N}[!QE template<typename T1>
T*Ge67 static bool test(T1*& ptr) {
4JXvP1` T* t = dynamic_cast<T*> (ptr);
w'_|X&@H return t != 0;
fWW B]h }
m+7%]$ ts_|7Ev template<typename T1>
!2&)6SL/ static const T* get(const T1*& ptr) {
Khv}q.)F const T* t = dynamic_cast<const T*> (ptr);
{*g{9` return t;
F4"bMN }
P_mP ^L 0*kS\R=P template<typename T1>
`'P&={p8 static T*& get(T1*& ptr) {
b{ A/M#= return dynamic_cast<T*> (ptr);
-$#2?/uqC }
Voq/0,d };
FqGMHM\J i4WHjeo\ #endif /* TYPEUTILS_H_ */
yP} |8x _
M B/p Q Q: 570508473
Y`$\o 邮 件:
athzhang@gmail.com 50A\Y)i_mZ 电 话:(0512) 55253348,(0) 18912671348
xe(7q1 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
g2^{+,/^K