一个简易的类型判别器 4/%Y@Z5 $6(a6! 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
UVXSW*$ ?GlXxx=eV 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
{1qr6P," 代码: 全选/*
\t5_V)P * File: TypeUtils.h
qV;I<AM * Author: kwarph [
kwarph@gmail.com ]
f >.^7.is * Time: 2009-3-21 下午03:25:02
% m"Qg< *
OE}FZCXF * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
8
/%{xB^ */
~KRS0^ wqi0%Cu* #ifndef TYPEUTILS_H_
7377g'jL #define TYPEUTILS_H_
8Ihl}aguW DJ*mWi. template<typename T>
TMo DN%{ struct InstanceOf {
y$9! rbL 0n'vF&E8
template<typename T1>
%`QgG static bool test(const T1*& ptr) {
T:@7EL const T* t = dynamic_cast<const T*> (ptr);
@%G?Nht]o return t != 0;
]-9w'K d }
.rITzwgB jFJ}sX9] template<typename T1>
T9XUNR{& static bool test(T1*& ptr) {
ec`re+1r T* t = dynamic_cast<T*> (ptr);
#4lIna%VX return t != 0;
jJ-C\
v }
7BL)FJ]UR] '
,S}X\ template<typename T1>
m[KmXPFht1 static const T* get(const T1*& ptr) {
!n` |k const T* t = dynamic_cast<const T*> (ptr);
zj(V\y&H return t;
Rk[a|T & }
xQ7U$QF|] nJGs ,~" template<typename T1>
awwSgy static T*& get(T1*& ptr) {
Gw\..O return dynamic_cast<T*> (ptr);
V.z8
]iG }
jw9v&/- };
'A^q)hpax tv.<pP9-C #endif /* TYPEUTILS_H_ */
S1I.l">P mL pM8~L Q Q: 570508473
w]yVNB 邮 件:
athzhang@gmail.com \hZ%NLj 电 话:(0512) 55253348,(0) 18912671348
~bCA8 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
aZCq{7Xs