一个简易的类型判别器 }^azj>p5 i!+0''i{# 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
\vgM`32< [E0.4FLT! 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
R0T{9,;[` 代码: 全选/*
Sz>Lbs * File: TypeUtils.h
Hli22~7T: * Author: kwarph [
kwarph@gmail.com ]
tHFBLM * Time: 2009-3-21 下午03:25:02
L/)Q1Mm *
R T/)<RT9 * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
]%+T+zg(Y */
beFD}` G=&nwSL #ifndef TYPEUTILS_H_
J#?z/ 3v( #define TYPEUTILS_H_
8b< 'jft !f G}<6&i template<typename T>
QW2SFpE struct InstanceOf {
KVPWJHGr 4E@_Fn_# template<typename T1>
AL*M`m_ static bool test(const T1*& ptr) {
u_6x{",5I const T* t = dynamic_cast<const T*> (ptr);
Ly]J-BTe return t != 0;
WT:ZT$W }
:~'R| l
ITfz/d8 template<typename T1>
=$#=w?~% static bool test(T1*& ptr) {
rVB\\ T* t = dynamic_cast<T*> (ptr);
N;*
wd< return t != 0;
->2m/d4a }
[p_<`gU? 2 @t?@,c template<typename T1>
$J*lD-h- static const T* get(const T1*& ptr) {
ilwI qj const T* t = dynamic_cast<const T*> (ptr);
unt{RVR% return t;
P9q ZjBS }
=a(]@8$!1 PBgU/zVn template<typename T1>
T}K@ykT static T*& get(T1*& ptr) {
WntolYd return dynamic_cast<T*> (ptr);
gq050Bl) }
/#!1 };
-GYJ)f #1Iev7w #endif /* TYPEUTILS_H_ */
c N~F32< 0D&-BAzi Q Q: 570508473
hSG1f` 邮 件:
athzhang@gmail.com 9)D9'/{L# 电 话:(0512) 55253348,(0) 18912671348
tfVlIY< 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
O T .bXr~