一个简易的类型判别器 06^/zr L}rZ1wV6 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
27ZqdHd Zw0KV%7hD 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
Yft [)id 代码: 全选/*
C}mhnU@ * File: TypeUtils.h
,H+Y1N4W( * Author: kwarph [
kwarph@gmail.com ]
U[x$QG6 m! * Time: 2009-3-21 下午03:25:02
4%~*} *
>4luZnWMI * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
XN Uw */
Q&r.wV| -fFtHw:kHh #ifndef TYPEUTILS_H_
=hvPq@C% #define TYPEUTILS_H_
9n\>Yieu 2sIt~ Gn template<typename T>
PY7H0\S) struct InstanceOf {
\f^xlX3&` ca7Y+9<
; template<typename T1>
EQ~<NzRp= static bool test(const T1*& ptr) {
%50)?J=zB const T* t = dynamic_cast<const T*> (ptr);
K0j%\]\Tp return t != 0;
G4SA
u }
G7" (,L` 5 7ihcjyXB template<typename T1>
rHw#<oV static bool test(T1*& ptr) {
8+|W%} T* t = dynamic_cast<T*> (ptr);
s,#We} bv return t != 0;
9zqo!& }
v[ML=pL 4Z%1eOR9V template<typename T1>
/A,w{09G static const T* get(const T1*& ptr) {
3S+9LOrhY const T* t = dynamic_cast<const T*> (ptr);
Z[*unIk return t;
o|h=M/ }
oFP8s[B 85G-`T template<typename T1>
(+(@P*c1 static T*& get(T1*& ptr) {
?ld&}|W~ return dynamic_cast<T*> (ptr);
YT+b{ }
a_P|KRl };
>"!ScYn 0}e?hbF%U #endif /* TYPEUTILS_H_ */
/.7RWy` Pp!4Ak4TT9 Q Q: 570508473
=9ff983 邮 件:
athzhang@gmail.com 8k-]u3 电 话:(0512) 55253348,(0) 18912671348
e7"T37 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
X$6NJ(2G