一个简易的类型判别器 *5QN: 7"_m?c8 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
x/pX?k B_uhNLd 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
/~(T[\E< 代码: 全选/*
6%a9%Is!O * File: TypeUtils.h
-Qy@-s $ * Author: kwarph [
kwarph@gmail.com ]
]x1;uE?1J * Time: 2009-3-21 下午03:25:02
&lCOhP# *
a1>Tz * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
sSLVR^ */
P5JE = &M K/YXLR + #ifndef TYPEUTILS_H_
dfA2G<Uc #define TYPEUTILS_H_
rNK<p3=7) {X\%7Zef+ template<typename T>
Y|l&mK? struct InstanceOf {
1!%T<!A. 8I}ATc
template<typename T1>
"X(9.6$_ static bool test(const T1*& ptr) {
y$}o{VE{x const T* t = dynamic_cast<const T*> (ptr);
|2Y/l~ return t != 0;
Gw$Y`]ipy }
4wkmgS
mP ]a}[ template<typename T1>
cq`!17"k static bool test(T1*& ptr) {
uv&4
A,h T* t = dynamic_cast<T*> (ptr);
h ^.jK2I return t != 0;
O[|_~v:^ }
j0b>n#e7 _ea|E 8 template<typename T1>
wX4gyr static const T* get(const T1*& ptr) {
+h)1NX;o1 const T* t = dynamic_cast<const T*> (ptr);
U]]ON6Y&F return t;
X:/7#fcG8 }
1)H;}%[ p[K!.vOt+ template<typename T1>
tZ.hSDH static T*& get(T1*& ptr) {
=E$B0^_2RC return dynamic_cast<T*> (ptr);
3s0I<cL }
|})v,
oB };
V"|`Z}XW dC/@OV)0# #endif /* TYPEUTILS_H_ */
*7w,o?l G+1i~&uV Q Q: 570508473
;0 4< 9i 邮 件:
athzhang@gmail.com arc{:u.K 电 话:(0512) 55253348,(0) 18912671348
w.(?O; 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
|\U 5m6 q