一个简易的类型判别器 X$xqu\t7 g_q{3PW. 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
;CC[> "#OmmU<U 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
5yQgGd) 代码: 全选/*
4f1*?HX& * File: TypeUtils.h
Sz._XY^ * Author: kwarph [
kwarph@gmail.com ]
#8(@a
Y * Time: 2009-3-21 下午03:25:02
f&,.h"bS *
"44X'G8N * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
[g/g(RL */
4v{gc/g J0x)m2
#ifndef TYPEUTILS_H_
aR3W9 #define TYPEUTILS_H_
/f2*J .$r(":A#) template<typename T>
m3,v&Z struct InstanceOf {
?iq:Gf mbd@4u template<typename T1>
Lkb?,j5 static bool test(const T1*& ptr) {
cL}g7D const T* t = dynamic_cast<const T*> (ptr);
4}0s^>R return t != 0;
68D.Li }
3}sd%vCK 7N:,F9V< template<typename T1>
:JOF!Q static bool test(T1*& ptr) {
D,R/abYZH T* t = dynamic_cast<T*> (ptr);
oZIoY*7IrQ return t != 0;
^v`|0z\ }
]v+\v re uYs+xX_ template<typename T1>
T+gqu
&9R static const T* get(const T1*& ptr) {
&<~`?-c const T* t = dynamic_cast<const T*> (ptr);
~< k'{ return t;
Z*oGVr
g }
(l$bA_F\ 9 Z4H5!:( template<typename T1>
P ^D\znvc static T*& get(T1*& ptr) {
x&kF;UC return dynamic_cast<T*> (ptr);
Er%nSH^" }
{>syZZ,h };
jirxzj x=9drKIw> #endif /* TYPEUTILS_H_ */
R@ihN?k D VC}; Q Q: 570508473
a*o=,! 邮 件:
athzhang@gmail.com T[c;}, 电 话:(0512) 55253348,(0) 18912671348
[]'BrG)! 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
"zYlddh