一个简易的类型判别器 y'^F,WTM eaEbH2J 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Tj=gRQ2v 5`"iq
"5Cf 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
$Jc q7E~ 代码: 全选/*
}@wVW))6$ * File: TypeUtils.h
k!&:(] * Author: kwarph [
kwarph@gmail.com ]
a_Jb>} * Time: 2009-3-21 下午03:25:02
/^Y[*5 *
>z QNHSi * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
2SYKe$e */
sa G8g E${J #ifndef TYPEUTILS_H_
-OWZ6#v( #define TYPEUTILS_H_
)Bo]=ZTJ^ ^_sQG template<typename T>
M_Bu,<q^ struct InstanceOf {
"CMucK CI^[I\$& template<typename T1>
teAukE=} static bool test(const T1*& ptr) {
Y3k[~A7X const T* t = dynamic_cast<const T*> (ptr);
=5?.'XMk return t != 0;
Pubv$u2 }
$C uR}g dq(E&`SzK template<typename T1>
X &D{5~qC static bool test(T1*& ptr) {
KU]ok ' T* t = dynamic_cast<T*> (ptr);
-G-3q6A return t != 0;
>OK#n)U` }
/D'M 24 myIe_k,F template<typename T1>
d*2u}1Jo8 static const T* get(const T1*& ptr) {
{rDq_^ const T* t = dynamic_cast<const T*> (ptr);
*GJ:+U&m[ return t;
;}K62LSR }
Plfdr~$ &<Zdyf?[Ou template<typename T1>
'C^;OjAg static T*& get(T1*& ptr) {
s7l23*Czl return dynamic_cast<T*> (ptr);
+P)ys#= }
doR4nRl9 };
H:Y&OZ Xh}&uZ`A #endif /* TYPEUTILS_H_ */
Ys3uPs )c+k_;t'+ Q Q: 570508473
D:9
2\l 邮 件:
athzhang@gmail.com yQ%"U^.m 电 话:(0512) 55253348,(0) 18912671348
&I/qG`W 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
O,'#C\