一个简易的类型判别器 z3K6%rb- <B6&I$Wc+ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
8$ma;U d h0g:@ae%& 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
$d)ca9 代码: 全选/*
7~GB;1n * File: TypeUtils.h
X'`~s}vGO * Author: kwarph [
kwarph@gmail.com ]
\7l-@6'7 * Time: 2009-3-21 下午03:25:02
Tp-l^?O-p *
mqAWL:VvQ7 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
:xh?eN& */
d_)o
&xY^OCt #ifndef TYPEUTILS_H_
elG<k%/2 #define TYPEUTILS_H_
Y))u&*RuT0 we;G]`@? template<typename T>
wm$}Pch struct InstanceOf {
1I<rXY(a` K,boVFs template<typename T1>
|&[L? static bool test(const T1*& ptr) {
5c^Z/
Jl$c const T* t = dynamic_cast<const T*> (ptr);
'&gF> return t != 0;
E gal4 }
`}lJH i IuOgxm~Y template<typename T1>
bLQ ^fH4ww static bool test(T1*& ptr) {
u#V5?i T* t = dynamic_cast<T*> (ptr);
`>?ra- return t != 0;
{
Q`QX`# }
Z6_N$Z.A G-He" 4& $ template<typename T1>
OV%Q3$15 static const T* get(const T1*& ptr) {
'6xQT-sUih const T* t = dynamic_cast<const T*> (ptr);
i 4%xfN return t;
dz*7gL;7G }
]Qfn(u=o ,^x4sA[/ template<typename T1>
T:IW%?M static T*& get(T1*& ptr) {
k7>|q"0C return dynamic_cast<T*> (ptr);
*hQTO=WF }
20iq2 };
;zIP,PMM spGB)k,^ #endif /* TYPEUTILS_H_ */
|/2y-[;: qd#sY.|1 Q Q: 570508473
p"FW&Q=PN 邮 件:
athzhang@gmail.com }*ZHgf]~# 电 话:(0512) 55253348,(0) 18912671348
)~+ e`q 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
sm\f0P!rv