一个简易的类型判别器 I!|y;mh:it JwN}Jm 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
pchQ#GU 4o1Q7 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
:0
W6uFNOU 代码: 全选/*
tx^92R2/
* File: TypeUtils.h
+Od1)_'\D3 * Author: kwarph [
kwarph@gmail.com ]
`FZ(#GDF * Time: 2009-3-21 下午03:25:02
K)<Wm,tON *
b\SXZN)Be * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
dIoF ~8V */
l?3vNa FeR m.1LxM$8 #ifndef TYPEUTILS_H_
5xh!f%6 #define TYPEUTILS_H_
@Ufa-h5"( HBt|}uZ?6i template<typename T>
G"G{AS struct InstanceOf {
^-gfib|VGe _v1bTg"? template<typename T1>
lTa1pp
Zw static bool test(const T1*& ptr) {
ljNzYg~- const T* t = dynamic_cast<const T*> (ptr);
*0=fT}&! return t != 0;
d4jVdOq2 }
1U717u T{_1c oL template<typename T1>
Hfh@<'NL] static bool test(T1*& ptr) {
MC4284A5 T* t = dynamic_cast<T*> (ptr);
sx-EA&5-9k return t != 0;
l%^h2
o }
o `b`*Z [ Z#+gh template<typename T1>
Of1IdE6~ static const T* get(const T1*& ptr) {
pBlRd{#fL const T* t = dynamic_cast<const T*> (ptr);
4fu'QZ(} return t;
5Waw?1GL }
z[WC7hvU fm3(70F\ template<typename T1>
8# 6\+R static T*& get(T1*& ptr) {
?F!EB4E\y} return dynamic_cast<T*> (ptr);
.i
MnWW }
s9uL<$,' };
E"Zb};} }*?yHJ3 #endif /* TYPEUTILS_H_ */
^{),+S [yO=S0 e Q Q: 570508473
3CA|5A.Pa 邮 件:
athzhang@gmail.com RxlszyE 电 话:(0512) 55253348,(0) 18912671348
Zw2jezP@t 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
gE\A9L~b