一个简易的类型判别器 n^&QOII@> ie.cTTOI 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
I]SR.Yp% vA`[#(C 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
5tq$SF42X 代码: 全选/*
MiRH i<g0 * File: TypeUtils.h
0SKt8pL` * Author: kwarph [
kwarph@gmail.com ]
;t?pyFT2Z * Time: 2009-3-21 下午03:25:02
Ur&: Rr *
8QC:ro * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
iT^lk'?{O */
P#ru-0DD -m'a%aog #ifndef TYPEUTILS_H_
L6 _Sc-sU #define TYPEUTILS_H_
w4L\@y3 P\zi:]h[Gh template<typename T>
n+uq|sYVa struct InstanceOf {
_IlL'c5 (OG@]|- template<typename T1>
&u=FLp5 static bool test(const T1*& ptr) {
mz\m^g3 const T* t = dynamic_cast<const T*> (ptr);
>MQW{^ return t != 0;
`}Q;2 F }
=?*V3e3{ 3J,/bgL5 template<typename T1>
*c3o&-ke9 static bool test(T1*& ptr) {
:cynZab T* t = dynamic_cast<T*> (ptr);
Ci*TX return t != 0;
["L?t ^*G }
!Aw.f! cuKgO{.GH template<typename T1>
$^
>n@Q@&L static const T* get(const T1*& ptr) {
V|a59[y? const T* t = dynamic_cast<const T*> (ptr);
9h0|^ttF return t;
> %Y#(_~a }
T3?kabbF ;F0A\5I template<typename T1>
-5>g 0o2 static T*& get(T1*& ptr) {
T@vVff return dynamic_cast<T*> (ptr);
>LLz G }
Q o= };
t]&n_]`{. @~N#)L^ #endif /* TYPEUTILS_H_ */
"t\9@nzdX 6kDU}]c:H] Q Q: 570508473
*M`[YG19!e 邮 件:
athzhang@gmail.com q?0goL 电 话:(0512) 55253348,(0) 18912671348
5cE[s<= 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
Xif`gb6`