一个简易的类型判别器 Mi{ns $B% s2GF*{ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
[3I|MZ vj344B 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
e(xuy'4r 代码: 全选/*
3kk^hvB+f * File: TypeUtils.h
15q^&l[Q * Author: kwarph [
kwarph@gmail.com ]
)TKn5[<4 * Time: 2009-3-21 下午03:25:02
(Li0*wRb *
zsd1n`r * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
6}?d%K */
p:K%-^ 9X%:
){ #ifndef TYPEUTILS_H_
0?(uqjD: #define TYPEUTILS_H_
Goc?HR w^ OB template<typename T>
."=%]l0 struct InstanceOf {
|q8N$m la)^`STh template<typename T1>
AS@(]T#R static bool test(const T1*& ptr) {
2%L`b"9}V const T* t = dynamic_cast<const T*> (ptr);
beC%Tnb7 return t != 0;
)XGz#C_P }
Lt=32SvTn q\x.e.@ template<typename T1>
Rw%?@X3m] static bool test(T1*& ptr) {
l_yF;5|?z T* t = dynamic_cast<T*> (ptr);
;>f\fhi' return t != 0;
3l45(%g+ }
(XW'1@b E5@ =LS
template<typename T1>
(tOhuSW static const T* get(const T1*& ptr) {
'vZIAnB8 const T* t = dynamic_cast<const T*> (ptr);
\~z$'3H` return t;
LiV&47e*> }
Hz."4nhv ~59lkr8 template<typename T1>
:i4(cap&}F static T*& get(T1*& ptr) {
-{ 1P`&G return dynamic_cast<T*> (ptr);
IsE3-X| }
kY'Wf`y( };
Ie!&FQe2