一个简易的类型判别器 Z5(9=8hB/ ,DE>:ARZ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
yIn$ApSGY ?-:2f#bC 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
C`t@tgT 代码: 全选/*
W9w*=W
)Z * File: TypeUtils.h
@I-gs( * Author: kwarph [
kwarph@gmail.com ]
AvrvBz[ * Time: 2009-3-21 下午03:25:02
sw}O g`U *
6Ot~Q * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
{aUTTEu */
0D 2I)E72o Dh8'og)7 #ifndef TYPEUTILS_H_
siI%6Gn; #define TYPEUTILS_H_
p,8~)ic_ >nSt<e template<typename T>
+Mijio struct InstanceOf {
ou-UR5 I[k"I( template<typename T1>
:!g|pd[{ag static bool test(const T1*& ptr) {
v
=y
2 const T* t = dynamic_cast<const T*> (ptr);
R`c[?U return t != 0;
DNq(\@x[! }
s*la`(x &
V>rq'~; template<typename T1>
1}a4AGAp static bool test(T1*& ptr) {
R]X 0D. T* t = dynamic_cast<T*> (ptr);
vb]kh_ return t != 0;
uEJ8Lmi }
rWL;pM<
iiQn/% template<typename T1>
-JgNujt#9 static const T* get(const T1*& ptr) {
J?3/L&seA const T* t = dynamic_cast<const T*> (ptr);
)pHlWi|h return t;
7?R600OA }
dWQsC| GKo&?Tj) template<typename T1>
8-x-?7 static T*& get(T1*& ptr) {
L_Gw:"-+Q return dynamic_cast<T*> (ptr);
70 7( LG }
o p9dYjG7 };
b*?u+tWP_ [-$
Do #endif /* TYPEUTILS_H_ */
WuUwd#e uRko[W( Q Q: 570508473
!-7n69:G 邮 件:
athzhang@gmail.com iWD|F- 电 话:(0512) 55253348,(0) 18912671348
Z,#H\1v3lB 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
cp(qaa