一个简易的类型判别器 lJYv2EZ ih YfWG| 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
aPb!-o{ QiRzA4-zq 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
Bf*
F^ 代码: 全选/*
cxv)LOl- * File: TypeUtils.h
Hd2_Cg FB * Author: kwarph [
kwarph@gmail.com ]
s~63JDy"E * Time: 2009-3-21 下午03:25:02
5rcno.~QO *
92tb`' * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
[R:O'AP}@} */
ix/uV)]k` ftH
0aI #ifndef TYPEUTILS_H_
CNN?8/u!@ #define TYPEUTILS_H_
1bDc ct .-34g5 template<typename T>
>qgBu_ struct InstanceOf {
#tfJ?w` &a(w0< template<typename T1>
Anm5Cvt;i static bool test(const T1*& ptr) {
Ux<h`
s const T* t = dynamic_cast<const T*> (ptr);
Fwqv1+ return t != 0;
_j2`#|oG }
@v'<~9vG %FRkvqV* template<typename T1>
dW5z0VuB$/ static bool test(T1*& ptr) {
i)p__Is T* t = dynamic_cast<T*> (ptr);
;s!H return t != 0;
07MLK8jS }
s`TBz8QO$ hg&AQk template<typename T1>
Fca?'^X static const T* get(const T1*& ptr) {
wvYxL
c#p0 const T* t = dynamic_cast<const T*> (ptr);
Bl1I "B return t;
]f c:CR }
q>X:z0H \ lKQ'_ template<typename T1>
|% kK?!e+- static T*& get(T1*& ptr) {
)-
\w return dynamic_cast<T*> (ptr);
JjCf<ktE. }
*w6N& };
PDsLJ|:yL N1-LM9S #endif /* TYPEUTILS_H_ */
>@|<1Fx| -Tt}M#W Q Q: 570508473
$k?L?R1 邮 件:
athzhang@gmail.com >*(>%E~H 电 话:(0512) 55253348,(0) 18912671348
lu}[XN 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
u`~{:V