一个简易的类型判别器 ;alt% :$n }G!'SZ$F 5 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
JOs
kf( {wO.nOB 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
rd"!&i 代码: 全选/*
j HObWUX * File: TypeUtils.h
B[2t.d;h * Author: kwarph [
kwarph@gmail.com ]
N
x^JC_ * Time: 2009-3-21 下午03:25:02
E,ooD3$h *
i+lq:St * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
G;USVF-'K */
0T0I<t K1-RJj\L #ifndef TYPEUTILS_H_
i~*6JB| #define TYPEUTILS_H_
,mz7!c9H^a "hZ `^"0b template<typename T>
9NZq
k struct InstanceOf {
$_e{Zv[ ]/AU_& template<typename T1>
jR*iA3LDo static bool test(const T1*& ptr) {
}r"E\~E const T* t = dynamic_cast<const T*> (ptr);
Ok}e|b[D return t != 0;
UQWv) }
579t^"ja~ 7nM<P4\ template<typename T1>
MOHw{Vw( static bool test(T1*& ptr) {
i.7$~} T* t = dynamic_cast<T*> (ptr);
z`D|O|#q return t != 0;
_^!C4?2! }
$XKUw"% `V.tqZF template<typename T1>
?DnQU"_$ static const T* get(const T1*& ptr) {
~bis!(}p- const T* t = dynamic_cast<const T*> (ptr);
>4HB~9dKU return t;
cBHUa}: }
K)h<#F Wul8ej: template<typename T1>
%{me<\( static T*& get(T1*& ptr) {
f/Z-dM\e return dynamic_cast<T*> (ptr);
vq@"y%C4 }
%:dd#';g };
;2^zkmDM 0/cgOP!^ #endif /* TYPEUTILS_H_ */
6vzvH U8%IpI; Q Q: 570508473
E^~ {thf 邮 件:
athzhang@gmail.com &]anRT# 电 话:(0512) 55253348,(0) 18912671348
(X (:h\^ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
]eTp?q%0