一个简易的类型判别器 1~FOgk1; I{&[[7H 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
:=V[7n]) nF:4}qy\ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
4@gG<QJW 代码: 全选/*
O\tb R= * File: TypeUtils.h
xH,a=8&9 * Author: kwarph [
kwarph@gmail.com ]
7z,C}-q * Time: 2009-3-21 下午03:25:02
G_tCmu\ *
nW:C/{n2tG * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
!F-w3
] */
[DOckf oZx 'oVx#w^mf #ifndef TYPEUTILS_H_
">nxHU #define TYPEUTILS_H_
On?v|10r'
l&zilVVm template<typename T>
>|=ts struct InstanceOf {
H41?/U,{ 6_;icpN] template<typename T1>
MchA{p&Ol static bool test(const T1*& ptr) {
LOYk9m const T* t = dynamic_cast<const T*> (ptr);
gVuFHHeUz return t != 0;
Rv>-4@fMJ }
2tO,dx ?$pCsBDo template<typename T1>
3,w_".m`# static bool test(T1*& ptr) {
j;r-NCBnz T* t = dynamic_cast<T*> (ptr);
**CR}
yV return t != 0;
>Tx?%nQ }
|e&\<LwsP t?gic9
q template<typename T1>
|r/"
|` static const T* get(const T1*& ptr) {
HiFUv>,u const T* t = dynamic_cast<const T*> (ptr);
,`Z1m
o>n return t;
kTB0b*V }
>U>(`r* !qg`/y9 template<typename T1>
r6qj7}\ static T*& get(T1*& ptr) {
z<;HQX, return dynamic_cast<T*> (ptr);
Or+U@vAnk }
_[3D };
+sA2WK] |df Pki{ #endif /* TYPEUTILS_H_ */
5qm`J,~k :Yl-w-oe Q Q: 570508473
b%`1cV 邮 件:
athzhang@gmail.com ;'K5J9k 电 话:(0512) 55253348,(0) 18912671348
w&#]-|$ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
&z3o7rif$