一个简易的类型判别器 EvA{@g4> _FV<[x,nE8 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
#9HQW:On w QV4[ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
0}(ZW~&1 代码: 全选/*
[=Qv?am * File: TypeUtils.h
']'H8Y-M * Author: kwarph [
kwarph@gmail.com ]
_,S
L;*G4| * Time: 2009-3-21 下午03:25:02
T(<
[k:` *
8#NI`s* * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
qx#k()E.U */
g[Tl#X7F sY @S
#ifndef TYPEUTILS_H_
ohI>\ #define TYPEUTILS_H_
eVRFb#EU0e -K+" :kiS template<typename T>
eh`s fH struct InstanceOf {
@y)'h]d d[h2Y/AR template<typename T1>
'A#`,^]uLF static bool test(const T1*& ptr) {
x2@Q5|a const T* t = dynamic_cast<const T*> (ptr);
;4E.Yr* return t != 0;
q]1HCWde }
\>8r)xC .#py5&`% template<typename T1>
@I\&-Z ^ static bool test(T1*& ptr) {
/^#8z(@B T* t = dynamic_cast<T*> (ptr);
^]iIvIp return t != 0;
)s @}|` }
k91ctEp9> t:pgw[UJ template<typename T1>
0RaE!4)!; static const T* get(const T1*& ptr) {
d E0
`tX const T* t = dynamic_cast<const T*> (ptr);
B.zRDB}i= return t;
#bFJ6;g=V }
I/whpOg <
5%:/j template<typename T1>
<<xUh|zE static T*& get(T1*& ptr) {
B/P E{ / return dynamic_cast<T*> (ptr);
9XU"Ppv }
942(a };
y.KFz9Qv nEtG(^N #endif /* TYPEUTILS_H_ */
PS*=MyNa fn6;
Q Q: 570508473
{9yv3[f3 邮 件:
athzhang@gmail.com .}AzkKdd@ 电 话:(0512) 55253348,(0) 18912671348
'QR
@G 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
r9),F.6,