一个简易的类型判别器 myJsRb5 ="I]D
I 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Y8CXinh 2oq>tnYyV[ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
{(aJrSE<z 代码: 全选/*
dB1bf2'b# * File: TypeUtils.h
S:R%%cy * Author: kwarph [
kwarph@gmail.com ]
m*a0V * Time: 2009-3-21 下午03:25:02
e1'_] *
rP>5OLP * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
^Nc\D7( l */
xwz2N5 &t6L8[#yd #ifndef TYPEUTILS_H_
^,`yt^^A #define TYPEUTILS_H_
I=lA7} *J%+zH template<typename T>
u37+B struct InstanceOf {
;xj^*b 02=eE|Y@ template<typename T1>
Zo&U3b{Dy static bool test(const T1*& ptr) {
Cjwg1?^RZ const T* t = dynamic_cast<const T*> (ptr);
F!Nx^M1 return t != 0;
h7%< }
A).wjd(_, (F#Qu nze template<typename T1>
]p$fEW g static bool test(T1*& ptr) {
_/PjeEm
$p T* t = dynamic_cast<T*> (ptr);
`|]juc return t != 0;
M\T6cN@m }
W;hI[9 .-<o[(s template<typename T1>
~>qcV=F^d, static const T* get(const T1*& ptr) {
[z Y9"B<3 const T* t = dynamic_cast<const T*> (ptr);
xOEj+%M return t;
DuCq16'0T }
1s1$J2LX |~uCLf> template<typename T1>
L-$GQGk{ static T*& get(T1*& ptr) {
n!f@JHL return dynamic_cast<T*> (ptr);
.Z9Bbab: }
%40|7O };
`XI1,&Wp7 0]5QX/I #endif /* TYPEUTILS_H_ */
zR]l2zL3 38JvJR yK} Q Q: 570508473
FVHEb\Z 邮 件:
athzhang@gmail.com HPu nNsA 电 话:(0512) 55253348,(0) 18912671348
k2O==IG]6 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
h( Iti&