一个简易的类型判别器 xt0j9{p 'nt,+`.y6 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
|(v=1#i v4~Xv5|w^F 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
_W@Fk)E6N 代码: 全选/*
=/!S * File: TypeUtils.h
d;:&3r|X * Author: kwarph [
kwarph@gmail.com ]
^J~4~! * Time: 2009-3-21 下午03:25:02
m$qC
8z] *
?JTyNg4< * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
>d
V@9 */
Vzm+Ew
_ h`rjD d #ifndef TYPEUTILS_H_
KrG6z#)Uz #define TYPEUTILS_H_
|5B9tjJ" at]Q4 template<typename T>
H[k3)r2 struct InstanceOf {
5(`GF| -gGK(PIf template<typename T1>
$uB(@Ft. static bool test(const T1*& ptr) {
CyDf[C)= const T* t = dynamic_cast<const T*> (ptr);
lfeWtzOf return t != 0;
4EbiCSo }
^Es)?>eah <OfzE5 template<typename T1>
c7!`d.{90 static bool test(T1*& ptr) {
Cbvl( ( T* t = dynamic_cast<T*> (ptr);
A0u:Fm{E return t != 0;
w=o m7%J@l }
-\C6j Qnx92 template<typename T1>
o xu9v/ static const T* get(const T1*& ptr) {
K05Y;URbd const T* t = dynamic_cast<const T*> (ptr);
b/Q"j3 return t;
;*H~Yb0 }
)'|W[Sh? nqJV1h template<typename T1>
bXL a~r4\ static T*& get(T1*& ptr) {
Ayt!a+J return dynamic_cast<T*> (ptr);
F<Z=%M3e }
',7Z1O };
,)G+h#Y[* q\Kdu5x{ #endif /* TYPEUTILS_H_ */
=8_TOvSJ4p vqZM89xY Q Q: 570508473
31Mc<4zI8 邮 件:
athzhang@gmail.com ]3jH^7[? 电 话:(0512) 55253348,(0) 18912671348
TFPq(i 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
%k)I=|