一个简易的类型判别器 Ye=c;0V(w w/1Os!p 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
PHxU6UPqy FQlYCb 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
-$2B!#]3 代码: 全选/*
I)(@'^) * File: TypeUtils.h
)yTBtYw3 * Author: kwarph [
kwarph@gmail.com ]
{ Mv$~T|e7 * Time: 2009-3-21 下午03:25:02
LBIsj}e *
^~7/hm: * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
j^T
i6F>f */
r%uka5@ #5%\~f #ifndef TYPEUTILS_H_
FJ+n-
\ #define TYPEUTILS_H_
G m~2s;/ DtFzT>$^F template<typename T>
} %bP9 struct InstanceOf {
_SQQS67fu" g7l?/p[n template<typename T1>
6k=*O|r static bool test(const T1*& ptr) {
4!U)a const T* t = dynamic_cast<const T*> (ptr);
lf9mdbm return t != 0;
}m -A #4. }
Lz/{
q6> 9F"^MzZ template<typename T1>
xTGdh static bool test(T1*& ptr) {
PK&\pkX T* t = dynamic_cast<T*> (ptr);
4(D1/8 return t != 0;
"*T4%3dA }
C}=9m
A +HSKFp template<typename T1>
(:|rCZC static const T* get(const T1*& ptr) {
X(npgkVP\ const T* t = dynamic_cast<const T*> (ptr);
/J5)_>R: return t;
]kir@NMv> }
>Tp`Kri 2[X\*"MQ2 template<typename T1>
G_E \p%L>] static T*& get(T1*& ptr) {
"nA~/t= return dynamic_cast<T*> (ptr);
8dUP_t~d#q }
OnND(YiX };
2EC<8}CG B1k;!@@14 #endif /* TYPEUTILS_H_ */
}8Yu"P${Y V6!1(| Q Q: 570508473
PLueH/gC . 邮 件:
athzhang@gmail.com .jv#<"DW 电 话:(0512) 55253348,(0) 18912671348
?'^dYQ4 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
^|lw~F