一个简易的类型判别器 Wc,~ { CK,7^U 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
)2V: ^HV>`Pjd}= 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
(eCJ;%%k 代码: 全选/*
}`W){]{kO * File: TypeUtils.h
J6U$qi * Author: kwarph [
kwarph@gmail.com ]
*+j*{>E * Time: 2009-3-21 下午03:25:02
@x"0_Qw *
::ajlRZG * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
G B>QK */
rs,2rSsg! +Vm}E0Ov #ifndef TYPEUTILS_H_
2q3+0Et8 #define TYPEUTILS_H_
)Y2{_ bx4" MS\>DW template<typename T>
!G SV6 struct InstanceOf {
v%"|WV[N 85n1eE template<typename T1>
D}dn.$ static bool test(const T1*& ptr) {
tNGp\~ const T* t = dynamic_cast<const T*> (ptr);
|?qquD 4= return t != 0;
62 O.?Ij }
7B!xT2{T k"NVV$; template<typename T1>
jUSmqm' static bool test(T1*& ptr) {
ebT:/wu,2 T* t = dynamic_cast<T*> (ptr);
=x<ge _Y return t != 0;
{DU`[:SQZg }
Qa.<K{m#? EQf[, template<typename T1>
(iL|Sq&}b static const T* get(const T1*& ptr) {
[x9KVd ^d const T* t = dynamic_cast<const T*> (ptr);
1+9W+$=h2 return t;
POvP]G9'" }
Z8rvWH9 Pa~)"u8 template<typename T1>
~(Q)"s\1I static T*& get(T1*& ptr) {
`Jzp Sw return dynamic_cast<T*> (ptr);
@&X|5p"[g }
-7S g62THS };
g=QDu7Ux
c|M6<} #endif /* TYPEUTILS_H_ */
OY:,D Zn
''_fjh Q Q: 570508473
5[A@gw0u 邮 件:
athzhang@gmail.com ~ vJ,`? 电 话:(0512) 55253348,(0) 18912671348
N'g>MBdI 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
c2&q*]?l;