一个简易的类型判别器 /_N*6a~ +w(sDH~kd 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
w3,1ImrXp =~OH.=9\ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
4`x.d 代码: 全选/*
A]z~Dw3
* File: TypeUtils.h
B=>:w%<Ii * Author: kwarph [
kwarph@gmail.com ]
h:[8$] * Time: 2009-3-21 下午03:25:02
Fp)+>oT *
dSD7(s! * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
Ur`jmB */
AgOw{bJ% Fq]ht* #ifndef TYPEUTILS_H_
}b//oe7 #define TYPEUTILS_H_
Cr!}qZq #~&SkIhBE template<typename T>
dG6 G struct InstanceOf {
W[5a'}OV >i`V-" x template<typename T1>
i\2d1Z static bool test(const T1*& ptr) {
J 8/]&Ow const T* t = dynamic_cast<const T*> (ptr);
#cN0ciCT' return t != 0;
7e{w)m:A }
5hVp2w- GI&XL'K& template<typename T1>
=@98Gl9! static bool test(T1*& ptr) {
.{cka]9WJz T* t = dynamic_cast<T*> (ptr);
0i76(2 return t != 0;
7J
0=HbH }
@Axwj I:6N?lD4}0 template<typename T1>
IoEITKd static const T* get(const T1*& ptr) {
>dnH const T* t = dynamic_cast<const T*> (ptr);
UDJ{iZ return t;
Ueq*R(9> }
6ty>0 Jj<UtD+ template<typename T1>
QAp+LSm static T*& get(T1*& ptr) {
?s4-2g return dynamic_cast<T*> (ptr);
8"d0Su4r }
C~16Jj:v };
=%p%+F@RlW X[Lwx.Ly8 #endif /* TYPEUTILS_H_ */
2"31k2H[ ^8,Y1r9`$ Q Q: 570508473
.qjVw?E 邮 件:
athzhang@gmail.com s0}OsHAj 电 话:(0512) 55253348,(0) 18912671348
@yBg)1AL 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
&3
QdQn,