一个简易的类型判别器 `~ * @q! -mRA# 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
w\DVzeW( SL;9Q[ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
~d6DD;`K 代码: 全选/*
"Q?k'^@ * File: TypeUtils.h
l"2OP6d * Author: kwarph [
kwarph@gmail.com ]
`g6h9GC6 * Time: 2009-3-21 下午03:25:02
uvV;Mlo] *
}C#;fp"L * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
opJMS6%r */
bIEhgiH !X<~-G2)l #ifndef TYPEUTILS_H_
mGGsB5#w> #define TYPEUTILS_H_
T9u <p=p QNxl/y\l0 template<typename T>
$.GOZqMs struct InstanceOf {
<]b7ZF] a)#1{JaoY template<typename T1>
k}0^&Quc4 static bool test(const T1*& ptr) {
ijdXU8 const T* t = dynamic_cast<const T*> (ptr);
<F.Tx$s return t != 0;
JGH60| }
DNj"SF(J WN_pd%m template<typename T1>
TW9WMId static bool test(T1*& ptr) {
h<SQL97N T* t = dynamic_cast<T*> (ptr);
Ko/ I#) return t != 0;
]sGHG^I6 }
K%X^n>O7C D*YM[sN` template<typename T1>
8kIR y static const T* get(const T1*& ptr) {
=n'
4?W@ const T* t = dynamic_cast<const T*> (ptr);
^-[ ?#] return t;
gW1b~(
fD }
%0mMz.f [_.5RPJP8 template<typename T1>
vJU*>U, static T*& get(T1*& ptr) {
K
a(J52 return dynamic_cast<T*> (ptr);
#~.w&~: }
!Wy[).ZAf };
O=dJi9;`#_ A6pjRxg #endif /* TYPEUTILS_H_ */
y:vxE8$Q DANw1_X\ Q Q: 570508473
)h8\u_U 邮 件:
athzhang@gmail.com QtJg^2@ 电 话:(0512) 55253348,(0) 18912671348
*s>BG1$< 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
)"m!YuS Y