一个简易的类型判别器 T^N L:78 H/pcXj 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
2|$lk8 /, ,zG <7~m 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
YN4"O> 代码: 全选/*
\m%J`{Mt * File: TypeUtils.h
`(!W s\: * Author: kwarph [
kwarph@gmail.com ]
O1|B3M[P * Time: 2009-3-21 下午03:25:02
G&.d)NfE *
jT{f<P0 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
\ibCR~W4 */
wInY7uBd! Is<x31R #ifndef TYPEUTILS_H_
>1m)%zt #define TYPEUTILS_H_
xnT3^ #-h " \`BPN template<typename T>
W0C{~|e struct InstanceOf {
^@ M [t< DakLD~H; template<typename T1>
i^/
eN static bool test(const T1*& ptr) {
L7s>su|c( const T* t = dynamic_cast<const T*> (ptr);
r>E\Cco return t != 0;
hx*HY%\P }
`i=JjgG@ h -Tsi:%b template<typename T1>
aMBL1d7 static bool test(T1*& ptr) {
S^|$23} T* t = dynamic_cast<T*> (ptr);
,Y$F7& return t != 0;
} /[_ }
z~BD(FDI k& WS$R?u template<typename T1>
GSC{F#:z static const T* get(const T1*& ptr) {
?]s%(R,B5 const T* t = dynamic_cast<const T*> (ptr);
NY.}uZ return t;
u82h6s<'W }
IO^:FnJJv ~g*Y,
Y template<typename T1>
@bc[
eas static T*& get(T1*& ptr) {
>_&~!Y.Z= return dynamic_cast<T*> (ptr);
O~$ {&( }
P/C&R-{') };
y>>vGU; lTxY6vi #endif /* TYPEUTILS_H_ */
UCe,2v% c"sj)-_ Q Q: 570508473
P#w}3^ 邮 件:
athzhang@gmail.com r hiS 电 话:(0512) 55253348,(0) 18912671348
m$7x#8gF
地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
+8Of-ZUx