一个简易的类型判别器 '=_}& (1r.AG`g 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Khbkv ab 1qcQ< 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
EPQ~V 代码: 全选/*
l;I)$=={= * File: TypeUtils.h
6O^'J~wiI * Author: kwarph [
kwarph@gmail.com ]
?t&sT * Time: 2009-3-21 下午03:25:02
38wt=0br *
+6=2B0$
r * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
%d5;JEgA:g */
LeA=*+zP[ a$7}_kb #ifndef TYPEUTILS_H_
LCrE1Q%VP #define TYPEUTILS_H_
F
j_r
n H1(Zzn1 template<typename T>
2l)J,z
struct InstanceOf {
K +oFu% 0ivlKe% template<typename T1>
^<8
c`k )e static bool test(const T1*& ptr) {
/-ebx~FX& const T* t = dynamic_cast<const T*> (ptr);
eGZX6Q7m return t != 0;
*[Ld\lRj }
+X4O.6Mn OIK14D: template<typename T1>
qHGXs@*M& static bool test(T1*& ptr) {
y`?{2#1H T* t = dynamic_cast<T*> (ptr);
paUlp7x return t != 0;
tdTD!' }
V[R33NYG "x.|' template<typename T1>
LLn,pI2fL{ static const T* get(const T1*& ptr) {
fX,L;Se" const T* t = dynamic_cast<const T*> (ptr);
6B)3SC return t;
7gR8Wr ^ }
=(f+geA"hm J`T1 88 template<typename T1>
(~~*PT- static T*& get(T1*& ptr) {
=X(8[ e return dynamic_cast<T*> (ptr);
=v4;t'_^ }
WKf->W };
K|-?1)Um 4~Ptn / g #endif /* TYPEUTILS_H_ */
=)Cqjp P=:mn> Q Q: 570508473
?=:wIMV
邮 件:
athzhang@gmail.com #"^F:: b- 电 话:(0512) 55253348,(0) 18912671348
VZ?"yUZ Id 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
oyGO!j