一个简易的类型判别器 N5>ioJj 3)jFv7LAU 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Fa}3UVm un{LwZH 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
MP5
vc5[ 代码: 全选/*
Hw 7 * File: TypeUtils.h
hn: * Author: kwarph [
kwarph@gmail.com ]
Qh4@Nl#Ncf * Time: 2009-3-21 下午03:25:02
R`? '|G]P *
.>4Zt'gCt * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
Eiqx1ZM */
ZPrL)'] AE1EZ# #ifndef TYPEUTILS_H_
gq[|>Rs75 #define TYPEUTILS_H_
#t.)4$ q~*9A-MH template<typename T>
A4Dj4n 0 struct InstanceOf {
)%8 ;C]G; C&Nga
`J template<typename T1>
^gP pmb<x static bool test(const T1*& ptr) {
E-P;3lS~ const T* t = dynamic_cast<const T*> (ptr);
-6wjc rTD return t != 0;
W4
v/,g> }
T$ <l<.Qd x|>N template<typename T1>
C%hMh/Li; static bool test(T1*& ptr) {
[1pWg^ T* t = dynamic_cast<T*> (ptr);
b`?$;5 return t != 0;
%Vf3r9
z }
05]y*I L9,;zkgo template<typename T1>
V1[Cc?o static const T* get(const T1*& ptr) {
(o+(YV^ const T* t = dynamic_cast<const T*> (ptr);
a: Ch"la return t;
T8nOb9Nrj }
[sx J< ^[]q/v'3m! template<typename T1>
: ,0F_["3 static T*& get(T1*& ptr) {
0K+a/G@
n\ return dynamic_cast<T*> (ptr);
uVnbOqR<X }
>A'Q9Tia; };
P0R8
f !bf8
r #endif /* TYPEUTILS_H_ */
[^oTC; woQ UrO( Q Q: 570508473
Ancka 邮 件:
athzhang@gmail.com ii< /!B( 电 话:(0512) 55253348,(0) 18912671348
o75Hit 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
_J|cJ %F>%