一个简易的类型判别器 vm}.gQ i1@g Hk 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
|RXC;zt9s l^?A8jG 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
>Mw =}g@P 代码: 全选/*
f|1FqL+T] * File: TypeUtils.h
<f{`}drp/ * Author: kwarph [
kwarph@gmail.com ]
Cy'W!qH * Time: 2009-3-21 下午03:25:02
<%uZwk># *
rWKLxK4oU * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
k\Tm?^L) */
`9{C/qB sc>)X{eb #ifndef TYPEUTILS_H_
u`,R0=<4 #define TYPEUTILS_H_
2czL 1Ci abP?Dj& template<typename T>
N ] /d struct InstanceOf {
!O_^Rn+<2 x+`3G. template<typename T1>
Yx c >+mx static bool test(const T1*& ptr) {
pR>QIZq<gT const T* t = dynamic_cast<const T*> (ptr);
%~XJwy- return t != 0;
|ema-pRC }
,
)3+hnFY 2dW-WHaM template<typename T1>
g c=|<( static bool test(T1*& ptr) {
-3U}
(cZ* T* t = dynamic_cast<T*> (ptr);
7B"aFnK;[J return t != 0;
|noTIAI }
$:Zxb lfd{O7 L0b template<typename T1>
Ap18qp static const T* get(const T1*& ptr) {
3PeJPw const T* t = dynamic_cast<const T*> (ptr);
|]b/5s;> return t;
8so}^2hTlT }
_Fy:3,( wb"t:(>& template<typename T1>
{z
~
' static T*& get(T1*& ptr) {
Gfch|Q^INy return dynamic_cast<T*> (ptr);
!`E2O*g }
'-TFr NO;h };
e}w!] fltcdA #endif /* TYPEUTILS_H_ */
u)>*U'bM I@v.Hqg+7 Q Q: 570508473
rn*VL(Yd( 邮 件:
athzhang@gmail.com <WkLwP3^ 电 话:(0512) 55253348,(0) 18912671348
4yy
yXj 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
:\We =oX