一个简易的类型判别器 @>q4hYF c1M *w9o 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
6ee1^> W_bA.zT{ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
kk$D:UQX 代码: 全选/*
R+5yyk\ * File: TypeUtils.h
k[a5D/b * Author: kwarph [
kwarph@gmail.com ]
sp7#e%R\ * Time: 2009-3-21 下午03:25:02
-#`tS *
3U9leY'2N * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
'byao03 */
*]>~lO1 (YY!e2 #ifndef TYPEUTILS_H_
MZ%S3' #define TYPEUTILS_H_
%4x,^ K] Ij?Qs{V template<typename T>
d;g]OeF struct InstanceOf {
S9E<)L p>1Klh:8.' template<typename T1>
{`+:!X static bool test(const T1*& ptr) {
jL*s(Yq const T* t = dynamic_cast<const T*> (ptr);
;]VLA9dC return t != 0;
bC,SE*F\ }
+HF*X~},i Eyh(257 template<typename T1>
I|tn7|*-A[ static bool test(T1*& ptr) {
S #C;"se T* t = dynamic_cast<T*> (ptr);
50^CILKo7 return t != 0;
A"wso[{ }
5 J
7XVe> %:.IG.`d template<typename T1>
:MILOwF static const T* get(const T1*& ptr) {
>K
7]G?+7E const T* t = dynamic_cast<const T*> (ptr);
7!A3PDAe return t;
@#::C@V] }
uiq;{!dop ,ik\MSS template<typename T1>
s@K #M static T*& get(T1*& ptr) {
RJE<1!{ return dynamic_cast<T*> (ptr);
c HUj6'neO }
Tl
S904' };
N#8$pE +K61-Div #endif /* TYPEUTILS_H_ */
/'L/O;H20 X({R+ Q Q: 570508473
/H$/s=YU\U 邮 件:
athzhang@gmail.com 4~e6z( 电 话:(0512) 55253348,(0) 18912671348
0c]3 ,# 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
bkL5srH