一个简易的类型判别器 <05\ why;1z>V 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
gpB3\ Q&S\?cKe 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
$yS7u 代码: 全选/*
Rs_bM@ * File: TypeUtils.h
`VM@-;@w * Author: kwarph [
kwarph@gmail.com ]
!)FM/Xj,o * Time: 2009-3-21 下午03:25:02
8pp^
w *
4RTuy+
M * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
A8Tq2]"* S */
Ju4={^# 3C{3"bP #ifndef TYPEUTILS_H_
@=B'<&g$Xv #define TYPEUTILS_H_
)>abB?RZ :yO.Te
F template<typename T>
u^&2T(xGi struct InstanceOf {
P]hS0,sE<( h)2W}p{a4= template<typename T1>
Q{F*%X static bool test(const T1*& ptr) {
KAH9?zI)M const T* t = dynamic_cast<const T*> (ptr);
2A'!kd$2 return t != 0;
U`Bw2Vdk]S }
Uv?s < Q$r1beA template<typename T1>
Vw0cf; static bool test(T1*& ptr) {
u?6L.^Op T* t = dynamic_cast<T*> (ptr);
J-yj&2 return t != 0;
{U/a h2* }
0 UdAF b.V\EOk template<typename T1>
:I*G tq
static const T* get(const T1*& ptr) {
7) aitDD const T* t = dynamic_cast<const T*> (ptr);
f.SV-{O_ return t;
+c$]Q-( }
A82Bn|J 1ga.%M* template<typename T1>
c]3% wL static T*& get(T1*& ptr) {
f6@fi`U, return dynamic_cast<T*> (ptr);
n<\
WVi }
xLhN3#^m };
S3EM6 `q' F=)9z+l# #endif /* TYPEUTILS_H_ */
Ln-/
9'^
~H"Q5Hr Q Q: 570508473
%6r MS} 邮 件:
athzhang@gmail.com ,[fn? s r 电 话:(0512) 55253348,(0) 18912671348
Nb;xJSl ox 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
l,5<g-r
V