一个简易的类型判别器 3JC uM_y 75a3hPCZ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
nlpEkq VL)<u"d4 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
H!*ypJ 代码: 全选/*
U/'l "N[ * File: TypeUtils.h
\MEBQ * Author: kwarph [
kwarph@gmail.com ]
et5lfj * Time: 2009-3-21 下午03:25:02
l%}q&_ *
bci]"uzB
* Copyright (C) 2008-2009, kwarph, All Rights Reserved.
<M\&zHv */
=r+K2]z,L x8aOXN#w} #ifndef TYPEUTILS_H_
LZ wCe$1 #define TYPEUTILS_H_
yH('Vl wa<k%_# M template<typename T>
3qTr|8`s struct InstanceOf {
6y!U68L;B ~!ooIwNNz template<typename T1>
Jqb~RP~ static bool test(const T1*& ptr) {
, >aa2 const T* t = dynamic_cast<const T*> (ptr);
0{vT`e' return t != 0;
+a39 !j
1_ }
Xz @#,F:@ u7mPp3ZYK template<typename T1>
"BsK'yo. static bool test(T1*& ptr) {
^g4Gw6q6 T* t = dynamic_cast<T*> (ptr);
#b/L~Bw[ return t != 0;
dQT[pNp: }
xO_>%F^? HW]?%9a template<typename T1>
q\@_L.tc[ static const T* get(const T1*& ptr) {
=4` wYh const T* t = dynamic_cast<const T*> (ptr);
Ck#e54gJX return t;
T1q27I }
$y6 <2w%b U;/2\Ii template<typename T1>
QM8Ic,QFvo static T*& get(T1*& ptr) {
_<RTes return dynamic_cast<T*> (ptr);
PR5N:Bw
}
?L\"qz%gP };
6=n|Ha 0g30nr) #endif /* TYPEUTILS_H_ */
@_f^AQ 8#;=>m% Q Q: 570508473
@<eKk.Y?+ 邮 件:
athzhang@gmail.com /-v ; 电 话:(0512) 55253348,(0) 18912671348
G@/iK/>5|` 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
|!]
"y<