一个简易的类型判别器 \yFUQq: 0.0-rd> 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
L
1!V'Hm{ J-,ocO 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
3^~J;U!3 代码: 全选/*
\#t)B
J2 * File: TypeUtils.h
c>{QTI:] * Author: kwarph [
kwarph@gmail.com ]
M3O !jN~ * Time: 2009-3-21 下午03:25:02
2M'dTXz *
$*iovam>^] * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
]VLseF */
3oMHy5 ZIc.MNq #ifndef TYPEUTILS_H_
_UPfqC ? #define TYPEUTILS_H_
o!KDeY dCTyfXou[= template<typename T>
OQB7C0+ & struct InstanceOf {
[K\b"^=< 2wIJ;rh template<typename T1>
!e~[U- static bool test(const T1*& ptr) {
C`ky= const T* t = dynamic_cast<const T*> (ptr);
0FI
|7 return t != 0;
-|KZOea }
PBCGC^0{ =(D"(OsQ/ template<typename T1>
h )5S4) static bool test(T1*& ptr) {
@;P ;iI T* t = dynamic_cast<T*> (ptr);
WEif&<Y return t != 0;
A8*zB=C }
U].]K ~Ss,he]Er template<typename T1>
][v]Nk static const T* get(const T1*& ptr) {
LrbD%2U$j5 const T* t = dynamic_cast<const T*> (ptr);
)j>U4a return t;
;VAyH('~ }
79W^;\3 ~~h#2SX template<typename T1>
~8u *sy static T*& get(T1*& ptr) {
"^\q{S&q2P return dynamic_cast<T*> (ptr);
s) shq3O }
@:9Gs!! };
Gb\PubJ diY7<u# #endif /* TYPEUTILS_H_ */
R8Vf6]s_ Q'jw=w!|g Q Q: 570508473
n@p@@ 邮 件:
athzhang@gmail.com ={zTQ+7S` 电 话:(0512) 55253348,(0) 18912671348
3EICdC
地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
^.!jD+=I