一个简易的类型判别器 TNs;#Q 0`y;[qAG[ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
OY$P8y3MY ?fF{M%i-% 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
f~nAJ+m= 代码: 全选/*
q):Ph&'r * File: TypeUtils.h
|_7nvck * Author: kwarph [
kwarph@gmail.com ]
,QW>M$g{ * Time: 2009-3-21 下午03:25:02
g!%C_AI *
G ,,c, * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
lB_&Lq8G */
l'h[wwEXm{ Q?]307g7 #ifndef TYPEUTILS_H_
:{2exu #define TYPEUTILS_H_
U)mg]o-VE m E<n=g= template<typename T>
m<]b]FQ struct InstanceOf {
^}nz^+R ra#s!m1 template<typename T1>
P5{|U"Y_ static bool test(const T1*& ptr) {
~bL^&o(W const T* t = dynamic_cast<const T*> (ptr);
*oR`l32O0z return t != 0;
7I.7%m,g }
M`{x*qR p%Zx<=f-_ template<typename T1>
I[b@U<\ static bool test(T1*& ptr) {
J*@(rb#G T* t = dynamic_cast<T*> (ptr);
W
'54g$T return t != 0;
2x3'm }
CYlZ<