一个简易的类型判别器 I3D8xl>P\ l.?R7f 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
Qi#%&Jz>f 2:Q9gru 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
f7}/ {}g 代码: 全选/*
Z}TuVE * File: TypeUtils.h
<P7f\$o~ * Author: kwarph [
kwarph@gmail.com ]
Q2iS0# * Time: 2009-3-21 下午03:25:02
aHe/MucK *
lqa.Nj * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
a -,!K */
!-%i" a +Cl(:kfYB #ifndef TYPEUTILS_H_
4r`u@ #define TYPEUTILS_H_
l2U"4d!o 1g5%Gr/0$5 template<typename T>
'H<?K struct InstanceOf {
i2A>T/?{ 9~bje^M template<typename T1>
g= k}6"F~ static bool test(const T1*& ptr) {
i2/:'
i const T* t = dynamic_cast<const T*> (ptr);
Zh]d&Xeq return t != 0;
Glcl7f"<^ }
(X@JlAfB 8E"Ik~ template<typename T1>
f@T/^|`mh static bool test(T1*& ptr) {
ZFNM>C^ T* t = dynamic_cast<T*> (ptr);
2j`x^ return t != 0;
]fIv{[A_
}
MbC7`Sp&i #.UooFk+Y template<typename T1>
(EGsw o static const T* get(const T1*& ptr) {
mnu4XE#| const T* t = dynamic_cast<const T*> (ptr);
So\(]S return t;
Q5b?-
P }
h.ojj$f, *fso6j#% template<typename T1>
(p'yya{( static T*& get(T1*& ptr) {
>_(Xb%w return dynamic_cast<T*> (ptr);
"]Wrir?l }
KlDW'R$ };
r4k=i4 uOc:^ #endif /* TYPEUTILS_H_ */
)uiYu3 I Lnbbv
* Q Q: 570508473
\:]Clvc 邮 件:
athzhang@gmail.com VG^*?62 电 话:(0512) 55253348,(0) 18912671348
q3adhY9|)0 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
?Ko)AP