一个简易的类型判别器 LDc?/
Z1 ]{^'{ z$i 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
+ Nn
$ lJb1{\|., 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
;UUpkOQO( 代码: 全选/*
3Xcjr2]~ * File: TypeUtils.h
:{BD/6 * Author: kwarph [
kwarph@gmail.com ]
uGt}H n * Time: 2009-3-21 下午03:25:02
Gj!9#on$7R *
<hkSbJF * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
]ie38tX$ */
F#-mseKhc ",O |uL #ifndef TYPEUTILS_H_
Z(F['Zf #define TYPEUTILS_H_
[ICFPY6 xP/?E template<typename T>
VW&EdrR,S struct InstanceOf {
71b0MHNkvv JPO'1D) template<typename T1>
.Q!_.LX static bool test(const T1*& ptr) {
M$YU_RPl+ const T* t = dynamic_cast<const T*> (ptr);
Zaime return t != 0;
,=>Ws:j }
B!+rO~ ad)jw:n template<typename T1>
)SU\s+"M static bool test(T1*& ptr) {
hQ7-m.UZw T* t = dynamic_cast<T*> (ptr);
4*Uzomb?q return t != 0;
4|U$ON?x }
![3 /! 5-*hAOThg template<typename T1>
Y=83r]% static const T* get(const T1*& ptr) {
nSy{{d const T* t = dynamic_cast<const T*> (ptr);
_nwsIjsW return t;
$/p0DY }
{#` O'F> 9[2qgw\D template<typename T1>
(;!92ct[? static T*& get(T1*& ptr) {
{'#1do}{ return dynamic_cast<T*> (ptr);
I-Q@v` }
wE3L,yx= };
+}VaQ8ti4 OCW0$V6;D- #endif /* TYPEUTILS_H_ */
11VtC) `^v=* & Q Q: 570508473
|qs8(
5z0 邮 件:
athzhang@gmail.com r{cmw`WA/P 电 话:(0512) 55253348,(0) 18912671348
DplS\}='s 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
)fy-]Ky
*