一个简易的类型判别器 C#L|7M??; kR{$&cE^ 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
^grDP*;W kkXe= f% 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
Ti>}To}B5 代码: 全选/*
:c(#03w*C * File: TypeUtils.h
oslj< * Author: kwarph [
kwarph@gmail.com ]
=FfR?6 ~ * Time: 2009-3-21 下午03:25:02
l|M|;5TW *
co'qVsOiH * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
CiTWjE?|7 */
Bk5ft4v- 15MKV=?oY #ifndef TYPEUTILS_H_
D!i|KI/ #define TYPEUTILS_H_
/'^BHA|h BRv#` template<typename T>
V@K^9R,| struct InstanceOf {
::@JL OXZx!h template<typename T1>
EF;B)y= static bool test(const T1*& ptr) {
?F~0\T,7 const T* t = dynamic_cast<const T*> (ptr);
{ea*dX872: return t != 0;
^Zlbs
goZ }
,<[x9 "3\ 2FGCf} , template<typename T1>
#r]GnC, static bool test(T1*& ptr) {
D3y4e8+Z' T* t = dynamic_cast<T*> (ptr);
<80M$a
g return t != 0;
lo36b zbT }
>"Zn#
FY ozA%u,\7k template<typename T1>
l
s%'\} static const T* get(const T1*& ptr) {
M->#WGl\B const T* t = dynamic_cast<const T*> (ptr);
w<Iq:3
return t;
4ZB]n,pfT }
g^^^fKUp ) DXK\3vf Ot template<typename T1>
fLV@~T| static T*& get(T1*& ptr) {
GD!!xt return dynamic_cast<T*> (ptr);
F0'8n6zj }
s+v$sF };
Z-aB[hE ")w~pZE&+ #endif /* TYPEUTILS_H_ */
,fj~BkW{ K:Z|# i- Q Q: 570508473
ppO!v? 邮 件:
athzhang@gmail.com vQ[ TcV 电 话:(0512) 55253348,(0) 18912671348
d/E0opv 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
,_: 6qn{