一个简易的类型判别器 R\B-cU[, eKq`t.*Ft 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
]H4T80wm& 4t0B_o" 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
!e}LB%zf 代码: 全选/*
8U5L|Ny.q * File: TypeUtils.h
J4-64t nZ * Author: kwarph [
kwarph@gmail.com ]
"AzA|zk')" * Time: 2009-3-21 下午03:25:02
wm$1LZ8o-` *
&{Zt(%\ ' * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
wap@q6fz< */
-xc*R%k LvsNU0x #ifndef TYPEUTILS_H_
`Eijy3>h #define TYPEUTILS_H_
%YI Xk1 'n9<z)/,! template<typename T>
{PXN$p:' struct InstanceOf {
SOq{`~,4B lm?1 K:+[ template<typename T1>
=lzRx%tm static bool test(const T1*& ptr) {
y7;i4::A\ const T* t = dynamic_cast<const T*> (ptr);
=Mb1)^m return t != 0;
vakAl; }
U9d0nj9 j JP2zom template<typename T1>
_k0X)N+li static bool test(T1*& ptr) {
FJ|6R( T_ T* t = dynamic_cast<T*> (ptr);
&B</^: return t != 0;
SD "' }
8b0!eB#_Ee (~R [K,G template<typename T1>
rNgFsFQ>. static const T* get(const T1*& ptr) {
Vt {uG const T* t = dynamic_cast<const T*> (ptr);
`h>a2 return t;
5Iv3B|u }
DriJn`vtzq %>dCAj" template<typename T1>
,X[lC\1a static T*& get(T1*& ptr) {
^^u{W|'CaH return dynamic_cast<T*> (ptr);
q K sI}X~ }
bZ-"R 6a$ };
?R
4sH HA?<j|M #endif /* TYPEUTILS_H_ */
E4a`cGb 8n.sg({g Q Q: 570508473
i`]-rM%J# 邮 件:
athzhang@gmail.com i'GBj,: 电 话:(0512) 55253348,(0) 18912671348
#1INOR9 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
MZyzc{c,