一个简易的类型判别器 e];IQ| G.@K#a9 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
a_[+id sm G?y~ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
W=+AU!% 代码: 全选/*
=HIKn6C< * File: TypeUtils.h
-Q
Mwtr#q} * Author: kwarph [
kwarph@gmail.com ]
HfP<hQmN' * Time: 2009-3-21 下午03:25:02
g[@0H= *
U+4[w`a} * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
fU%Ys9:wU */
.`J*l=u$ -AVT+RE9z #ifndef TYPEUTILS_H_
Mg8ciV}\xY #define TYPEUTILS_H_
+"WNG /4+zT?f template<typename T>
=x(k)RTDu struct InstanceOf {
xN>\t& c iGj,B =35 template<typename T1>
P@5-3]m= static bool test(const T1*& ptr) {
QFhyidm=] const T* t = dynamic_cast<const T*> (ptr);
i88`W&tI{ return t != 0;
~+BU@PHv }
'aD"v> \7xc*v [ template<typename T1>
4z~;4 static bool test(T1*& ptr) {
l$l6,OzS@ T* t = dynamic_cast<T*> (ptr);
P$AHw;n[R return t != 0;
myOW^ }
TI"Ki$jC 0N4ZV}s,d template<typename T1>
&n83>Q static const T* get(const T1*& ptr) {
,1<6=vL const T* t = dynamic_cast<const T*> (ptr);
lSd tw b return t;
Dq!YB[Z$: }
mN R}%s
hmb=_W template<typename T1>
F60m]NUM)c static T*& get(T1*& ptr) {
&js$qgY return dynamic_cast<T*> (ptr);
7+[L6q/K }
@&Yl'&pn-R };
YCzH@94QeV S4(?=,^- #endif /* TYPEUTILS_H_ */
t0:~BYXu *8%uXkM m Q Q: 570508473
k4:=y9`R}$ 邮 件:
athzhang@gmail.com 2#UVpgX? 电 话:(0512) 55253348,(0) 18912671348
wn<k"6x 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
7(LB}