一个简易的类型判别器 s%jBIeh 7<j!qWm0 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
4$Ai!a `cGks 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
DGTLlBkT
代码: 全选/*
?@"@9na * File: TypeUtils.h
i2qN 0?n * Author: kwarph [
kwarph@gmail.com ]
iJTG+gx * Time: 2009-3-21 下午03:25:02
K?l|1jez(# *
tV++QC7@L * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
7U [C=NL */
{Ydhplg{ yX&#
rI #ifndef TYPEUTILS_H_
rc=E%Qv%? #define TYPEUTILS_H_
3p#UEH3 s\*p|vc template<typename T>
{\$S585 struct InstanceOf {
RZz?_1' maapX/J template<typename T1>
oiyvKMHz7 static bool test(const T1*& ptr) {
k=)U const T* t = dynamic_cast<const T*> (ptr);
BValU return t != 0;
Hca(2 ]T- }
|.; N_i ZcA"HD% template<typename T1>
?O25k!7 static bool test(T1*& ptr) {
UC&$8^ T* t = dynamic_cast<T*> (ptr);
Z_ElLY return t != 0;
e{8C0= }
oIrc))j,$ kHK<~srB template<typename T1>
B;bP~e>W static const T* get(const T1*& ptr) {
S1r{2s& const T* t = dynamic_cast<const T*> (ptr);
Gb^63.} return t;
)QAYjW!Z }
xbiprhdv tN{0C/B9 template<typename T1>
v8-szW). static T*& get(T1*& ptr) {
.r/s.g return dynamic_cast<T*> (ptr);
c<1$zQY! }
&tOo[U? };
GVT 6cR {r&r^!K; #endif /* TYPEUTILS_H_ */
n[/D>Pi za6 hyd^ Q Q: 570508473
thPAD+u.3 邮 件:
athzhang@gmail.com X[J<OTj`$ 电 话:(0512) 55253348,(0) 18912671348
2K~v`c*4 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
2`i&6iz