一个简易的类型判别器 _@prv7e -;`W"&`ss 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
ZJ[ Uz_%W OEwfNZQ- 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
BtHvfoT 代码: 全选/*
JN KZ'9 * File: TypeUtils.h
.DvAX(2v * Author: kwarph [
kwarph@gmail.com ]
LMG\jc?, * Time: 2009-3-21 下午03:25:02
M<~F>(wxA *
NxX1_d * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
QT&{M
#Ydn */
#=.h:_9 5PL,~Y #ifndef TYPEUTILS_H_
VDmd+bvJV #define TYPEUTILS_H_
\!V6` @0KC }\*Sf[EMD template<typename T>
dw4)4_ struct InstanceOf {
>aWJ+ ,6buo~?W: template<typename T1>
gq@."wHU static bool test(const T1*& ptr) {
.yP
3}Nl const T* t = dynamic_cast<const T*> (ptr);
_5LlL#) return t != 0;
^ KjqS\< }
X*yl%V
z0W+4meoH template<typename T1>
$WPN.,7 static bool test(T1*& ptr) {
YWZF*,4 T* t = dynamic_cast<T*> (ptr);
V7@xr
M return t != 0;
+{w&ksk }
v1lj /A P%lLKSA template<typename T1>
&^7)yS+C static const T* get(const T1*& ptr) {
/&dt!.WY^ const T* t = dynamic_cast<const T*> (ptr);
<C{5(=X{ return t;
H5I#/j }
zXC In tj&A@\/ template<typename T1>
nz',Zm}, static T*& get(T1*& ptr) {
sq^"bLw return dynamic_cast<T*> (ptr);
*sG<w%% }
-/qrEKQ0U? };
FTenXJ/c o <'gM]$ #endif /* TYPEUTILS_H_ */
]/']{*T1 %%>?<4t Q Q: 570508473
ZF/KV\Ag) 邮 件:
athzhang@gmail.com .e AC!R 电 话:(0512) 55253348,(0) 18912671348
*j*
WE\ 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
fytx({I
.a