一个简易的类型判别器 WL#E%6p[ x 8_nLZ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
GxynLXWo> J]-z7<j'] 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
4S7#B 代码: 全选/*
S
A\_U::T * File: TypeUtils.h
qRbU@o.3 * Author: kwarph [
kwarph@gmail.com ]
4DTT/ER'qA * Time: 2009-3-21 下午03:25:02
C{<dzooz *
+9fQ YJBA * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
?LAiSg=eq */
eE0'3?q( rm5@dM@ #ifndef TYPEUTILS_H_
3ss0/\3P #define TYPEUTILS_H_
hN"cXz"/ r:~q{ template<typename T>
+U^H`\EUr struct InstanceOf {
V/dL-;W; 7.W$6U5 template<typename T1>
-TT{4\%s static bool test(const T1*& ptr) {
1Z_2s2`p const T* t = dynamic_cast<const T*> (ptr);
&W*do return t != 0;
%p}xW V . }
|!?lwBs4 /hv2=A template<typename T1>
`=.A])> static bool test(T1*& ptr) {
k>V~iA T* t = dynamic_cast<T*> (ptr);
.Z9{\tj return t != 0;
<t"KNKI }
.Y*jL &! 2E$K='H:, template<typename T1>
v1aE[Q static const T* get(const T1*& ptr) {
b+tm[@|,v const T* t = dynamic_cast<const T*> (ptr);
4R&e5! return t;
dm~Uj }
6$5?%ZLJ xWuvT, ^ template<typename T1>
cGUsao static T*& get(T1*& ptr) {
}xb?C""q^q return dynamic_cast<T*> (ptr);
zPyN2|iFah }
14S_HwX };
{=Z _L?j x
T{s%wE #endif /* TYPEUTILS_H_ */
z 0-[ RGg !;U;5 e=0 Q Q: 570508473
*a2-Vte 邮 件:
athzhang@gmail.com k+%c8w 9 电 话:(0512) 55253348,(0) 18912671348
FE4P
EBXvu 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
G]k+0&X