一个简易的类型判别器 !%s&GD8&l 8KhE`C9z 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
( 17=|s "<5su5] 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
=&
.KKr 代码: 全选/*
&]mZp& * File: TypeUtils.h
"o.g}Pv * Author: kwarph [
kwarph@gmail.com ]
ui$JQ _P * Time: 2009-3-21 下午03:25:02
ap[{`u *
s#*T(pY * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
\vQjTM-7 */
FG[YH5 w;Jby #ifndef TYPEUTILS_H_
FJl_2 #define TYPEUTILS_H_
bO2s'!x cun&'JOH?U template<typename T>
_K5R?"H0 struct InstanceOf {
8Q2qroT ExDv7St1(k template<typename T1>
4$^\s5 K static bool test(const T1*& ptr) {
9X- w5$< const T* t = dynamic_cast<const T*> (ptr);
,-GkP>8f( return t != 0;
vm
y?8E6+ }
~7}aW# WFTXSHcG template<typename T1>
$V0G[!4 static bool test(T1*& ptr) {
}KZt7) T* t = dynamic_cast<T*> (ptr);
c'8pTP%[ return t != 0;
{-fhp@; }
h/a|-V}m& 6?C|pO template<typename T1>
qQ%RnD9 static const T* get(const T1*& ptr) {
x]=s/+Y const T* t = dynamic_cast<const T*> (ptr);
4%s6 d,6" return t;
} qf=5v }
X*^^W_LH. (&)PlIi7 template<typename T1>
4|#@41\ B static T*& get(T1*& ptr) {
jrKRXS return dynamic_cast<T*> (ptr);
UbnX%2TW }
Hido[ };
1YrIcovi- ZVin+ z #endif /* TYPEUTILS_H_ */
+6$ |No ls928 Q Q: 570508473
|v6kZ0B< 邮 件:
athzhang@gmail.com 7l~d_<h 电 话:(0512) 55253348,(0) 18912671348
H`:2J8 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
Hv~&RZpe