一个简易的类型判别器 D~1nh%x_ UA/3lH} 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
L7KHs'c* ,mRN;|N 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
qH-dT,`"{ 代码: 全选/*
weu'<C * File: TypeUtils.h
bT>^%
H3 * Author: kwarph [
kwarph@gmail.com ]
CSD8?k]2 * Time: 2009-3-21 下午03:25:02
9M7{.XR, *
a-Y K* * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
q<7Nz]Td */
yx-{}Yj^ vI+PL(T@ #ifndef TYPEUTILS_H_
^+P]_< 43 #define TYPEUTILS_H_
3wr~P 8en85
pp8P template<typename T>
I*24%z9 struct InstanceOf {
:H?p^d
e p?!]sO1l template<typename T1>
EatpORq static bool test(const T1*& ptr) {
*m|]c4 const T* t = dynamic_cast<const T*> (ptr);
E]gKJVf9[ return t != 0;
*+J&ebSTN }
,+q5e^P r67 3+ template<typename T1>
plp).Gq static bool test(T1*& ptr) {
N),Zb^~nw T* t = dynamic_cast<T*> (ptr);
Bz24U wcZ return t != 0;
\V&ly/\
) }
L$jRg +ivz template<typename T1>
pY:xxnE static const T* get(const T1*& ptr) {
bG5c~ const T* t = dynamic_cast<const T*> (ptr);
.t["kaA return t;
O4}cv }
Dm5UQe ly{~X template<typename T1>
+ W +<~E static T*& get(T1*& ptr) {
(C. 1'<] return dynamic_cast<T*> (ptr);
#cApk }
*{tJ3<t(1 };
K|s+5>]W/[ HFf|
>&c& #endif /* TYPEUTILS_H_ */
]])i"oew HDC`g Q Q: 570508473
PCFm@S@Q 邮 件:
athzhang@gmail.com #}A!Bk 电 话:(0512) 55253348,(0) 18912671348
{~=[d`t 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
}b0qrr