一个简易的类型判别器 YVqhX]/ P\N$TYeH 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
RLecKw&1{3 f;
>DM 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
c,4UnEoCR 代码: 全选/*
}.MJVB3 * File: TypeUtils.h
uu]<R@!J * Author: kwarph [
kwarph@gmail.com ]
UPUO8W)<Z6 * Time: 2009-3-21 下午03:25:02
{i`BDOaL *
'mG[#M/Y * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
d;V */
3[aCy4O bU(t5
[ #ifndef TYPEUTILS_H_
j`ggg]"&$ #define TYPEUTILS_H_
+'JM:};1X8 vR-rCve$P template<typename T>
m3\lm@`)O struct InstanceOf {
Z/6B[,V FC/m,D50oI template<typename T1>
%Mz(G-I.\ static bool test(const T1*& ptr) {
uZ\ > const T* t = dynamic_cast<const T*> (ptr);
lMF j"x\ return t != 0;
``$At ,m }
q2Ax-# ,]42v? template<typename T1>
P ;PS+S9 static bool test(T1*& ptr) {
bu,Z' T* t = dynamic_cast<T*> (ptr);
Tg)Fr) return t != 0;
h 5t,5e} }
!7P 1%/ 2?nK71c" template<typename T1>
Cd"O'<^Sb static const T* get(const T1*& ptr) {
7V%}U5 const T* t = dynamic_cast<const T*> (ptr);
#rF|X6P return t;
I[WW1P5 }
"!9~77 tB8XnO_c template<typename T1>
7Ha
+@ static T*& get(T1*& ptr) {
ePP-&V"`" return dynamic_cast<T*> (ptr);
U[u9RB }
Gdi1lYu6V };
J`Q#p%W 6Z\[{S]; #endif /* TYPEUTILS_H_ */
p&_Kb\}U v%VCFJ Q Q: 570508473
oJvF)d@gU 邮 件:
athzhang@gmail.com %o.{h 电 话:(0512) 55253348,(0) 18912671348
d_-{-@ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
xoA\^AA