一个简易的类型判别器 NA/`LaJ zCQP9oK! 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
T*SLM"x 54Rp0otv 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
|&{S ~^$ 代码: 全选/*
M49l2x=]9 * File: TypeUtils.h
n42\ty9 * Author: kwarph [
kwarph@gmail.com ]
_tX=xAO9 * Time: 2009-3-21 下午03:25:02
Ha|}Oj
*
AEaN7[PQx| * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
|nWEuKHy */
8C8S)
; yyljyE #ifndef TYPEUTILS_H_
A.("jb@I #define TYPEUTILS_H_
,b&hLht A-:k4] {%P template<typename T>
KpYezdPF) struct InstanceOf {
@XolFOL"f" `_ 1~[t template<typename T1>
CEI"p2 static bool test(const T1*& ptr) {
* 30K}&T const T* t = dynamic_cast<const T*> (ptr);
(E)hEQ@8 return t != 0;
`7w-_o
% }
+a^gC
y]+5Y.Cw$ template<typename T1>
k9OGnCW\ static bool test(T1*& ptr) {
vm[*+&\2 T* t = dynamic_cast<T*> (ptr);
7@>/O)>(AS return t != 0;
]b;m~|9 }
x x>hJ! C
'MR=/sd template<typename T1>
'nGUm[vh static const T* get(const T1*& ptr) {
,lA@C2c const T* t = dynamic_cast<const T*> (ptr);
OqIXFX" return t;
5N$XY@ }
aIFlNS,y 5v)bs\x6 template<typename T1>
o
?vGI= static T*& get(T1*& ptr) {
Q17dcgd return dynamic_cast<T*> (ptr);
|@'O3KA }
/P@%{y };
cZ?$_;= 3k9n*jY0 #endif /* TYPEUTILS_H_ */
L55UeP\ rkR5>S( 2M Q Q: 570508473
D0xQXC3$` 邮 件:
athzhang@gmail.com qjhV/fsfb 电 话:(0512) 55253348,(0) 18912671348
F/BR#J1 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
'7el`Ff