一个简易的类型判别器 pM3BBF% wt;aO_l 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Nig-D>OS F)Lbr>H?I 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
V;jz0B 代码: 全选/*
/G ;yxdb * File: TypeUtils.h
>Z%`&D~u * Author: kwarph [
kwarph@gmail.com ]
0
HmRl * Time: 2009-3-21 下午03:25:02
'o L8Z *
|#6Lcz7[ * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
P_U-R%f */
d9"4m>ymS CgC wM=!r #ifndef TYPEUTILS_H_
4aC#Cv:0 #define TYPEUTILS_H_
ZD(gYNi C+5nft6: template<typename T>
8vK&d> struct InstanceOf {
J^4k} 2wCRT}C template<typename T1>
8n? .w:Y/ static bool test(const T1*& ptr) {
~@lNBF const T* t = dynamic_cast<const T*> (ptr);
hLRQ) return t != 0;
iY-dM(_:] }
-wB AFr o*_ D template<typename T1>
{QID @ static bool test(T1*& ptr) {
nKdLhCN'= T* t = dynamic_cast<T*> (ptr);
hh9{md\ return t != 0;
#eYVZ=E }
oWmla*nCKL /eQn$ZRP, template<typename T1>
Fm"$W^H static const T* get(const T1*& ptr) {
Npqb xb const T* t = dynamic_cast<const T*> (ptr);
VM[8w` return t;
@d\F; o< }
"|if<hx+ 3nO|A: t template<typename T1>
$$a"A(Y static T*& get(T1*& ptr) {
tF|bxXsZ return dynamic_cast<T*> (ptr);
(&(f`c@I }
<T).+
M/ };
.FU EF) EeO{G*pq #endif /* TYPEUTILS_H_ */
2olim1 q<VhP2R Q Q: 570508473
7nmo p7 邮 件:
athzhang@gmail.com z( wXs&z; 电 话:(0512) 55253348,(0) 18912671348
{/ta1&xyG 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
#^Y,,GA