一个简易的类型判别器 q8/MMKCbX F Sw\_[^CQ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
e+~\+:[? AgS7J(^&3 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
wQ^EYKD 代码: 全选/*
-:|?h{q?u * File: TypeUtils.h
`o=q%$f#k~ * Author: kwarph [
kwarph@gmail.com ]
{1UQ/_ * Time: 2009-3-21 下午03:25:02
iII=;:p *
)wC?T * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
}& cu/o4 */
(gP)%
^
DaBz\ #ifndef TYPEUTILS_H_
^hc!FD #define TYPEUTILS_H_
OGK}EI ,]9P{k]O template<typename T>
9oYgl1}d struct InstanceOf {
* @ 3Ag( K#6P}tf template<typename T1>
&J[:awQX static bool test(const T1*& ptr) {
63\/ *
NNB const T* t = dynamic_cast<const T*> (ptr);
7 HIeJ return t != 0;
vB.E3 r= }
^2Fei.?T. CyS$|E template<typename T1>
tScPa,( static bool test(T1*& ptr) {
rp3V3]EE T* t = dynamic_cast<T*> (ptr);
0?s|i : return t != 0;
%j.0G`x9 + }
t{ xf:~B zk$FkbX template<typename T1>
I'A_x$ib6 static const T* get(const T1*& ptr) {
ojaws+(& y const T* t = dynamic_cast<const T*> (ptr);
>_[9t return t;
t^+ik1. }
);#JL0I EK{Eo9l template<typename T1>
]{3)^axW; static T*& get(T1*& ptr) {
.~~nUu+M return dynamic_cast<T*> (ptr);
8&GBV_`I }
4{y)TZ };
\UPjf]& e7^mmm #endif /* TYPEUTILS_H_ */
~xkeuU )eUh=eW Q Q: 570508473
&XIt5<$~R 邮 件:
athzhang@gmail.com E{XH?_xo 电 话:(0512) 55253348,(0) 18912671348
kZR8a(4D 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
HVi'eNgo