一个简易的类型判别器 8klu* u~^d5["T 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Tj*Vk $}0 |d8x55dk 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
7vs>PV 代码: 全选/*
w[wrZ:[ * File: TypeUtils.h
+gOv5Eno- * Author: kwarph [
kwarph@gmail.com ]
qB IKJ * Time: 2009-3-21 下午03:25:02
a5xp[TlXn. *
GE[J`?E] * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
o=VDO,eS */
!,< )y}L^) PKM8MYvo #ifndef TYPEUTILS_H_
H#;-(`F #define TYPEUTILS_H_
m0k~8^L@f KoNJ;YiKtN template<typename T>
]2P*Z6Az struct InstanceOf {
7 a}qnk% yqw#= fy template<typename T1>
gjVKk static bool test(const T1*& ptr) {
#A2)]XvY const T* t = dynamic_cast<const T*> (ptr);
m:7$"oq| return t != 0;
Yw\PmRL"p }
'4nR ^, CcHf1
_CI template<typename T1>
AI&Bv static bool test(T1*& ptr) {
p|z\L}0 T* t = dynamic_cast<T*> (ptr);
5xawa:K return t != 0;
VSlIeZ }
A%pBvULH .*s1d)\: template<typename T1>
6:(*u{ static const T* get(const T1*& ptr) {
g=
ql 3N const T* t = dynamic_cast<const T*> (ptr);
']hB_4v return t;
(*Jcx:rH }
RTW4r9~' F`$V H^%V template<typename T1>
c.u$NnDU6 static T*& get(T1*& ptr) {
^$7Lmd.qI return dynamic_cast<T*> (ptr);
<4{,u1!t }
%/o8-N|_[ };
_^<HlfOK _BV'J92. #endif /* TYPEUTILS_H_ */
^nYS@ n'yC- ; Q Q: 570508473
PyD'lsV
邮 件:
athzhang@gmail.com "?Eh_Dw 电 话:(0512) 55253348,(0) 18912671348
8#9di 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
_Kp{b"G