一个简易的类型判别器 4G:I VK9 AL%gqt] 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
HF9\SVR
B Lx{bR= 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
KGMX >t' 代码: 全选/*
`y&d * File: TypeUtils.h
]=s!cfu * Author: kwarph [
kwarph@gmail.com ]
o/EN3J * Time: 2009-3-21 下午03:25:02
GM.2bA(y *
h8b*=oq * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
s6#@S4^=\ */
zW`Zmt\T2 63s<U/N #ifndef TYPEUTILS_H_
@%4MFc0`! #define TYPEUTILS_H_
|G2hm8
Y ~s}0z&v^te template<typename T>
b-/zt Z@u struct InstanceOf {
A)5-w`1 3Y\7+975m template<typename T1>
hjuzVOE|W static bool test(const T1*& ptr) {
_%HpB= const T* t = dynamic_cast<const T*> (ptr);
81\$X return t != 0;
J{GtH[ }
L{v^: x.V6C0|6" template<typename T1>
Cd4a7<- static bool test(T1*& ptr) {
4Xna}7 T* t = dynamic_cast<T*> (ptr);
<OKzb3e return t != 0;
x+kP,v }
-ff|Xxar{ -{Lc?= template<typename T1>
F1V[8I.0 static const T* get(const T1*& ptr) {
?)B"\#`t const T* t = dynamic_cast<const T*> (ptr);
+]n.uA-`[a return t;
I91pX<NBf }
; Nw. -Jo8jE~>V template<typename T1>
-IBf;"8f static T*& get(T1*& ptr) {
Sm(QgZO[4 return dynamic_cast<T*> (ptr);
9Fe(],AzF }
?
x1"uH };
^*;{Uj+O~Y 5lp
L$ #endif /* TYPEUTILS_H_ */
]!>ThBMa :!omog Q Q: 570508473
,/.U'{ 邮 件:
athzhang@gmail.com jTNfGu0x 电 话:(0512) 55253348,(0) 18912671348
F&{RP> 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
S
("Zzq`