一个简易的类型判别器 K8R}2K-Y '=V!Y$tn 在某些时候,我们需要判别一个对象的类型,C++提供了
RTTI(运行时类型信息)机制,比如使用
typeid 关键字,但 Bjarne 建议尽量不要使用RTTI来判定对象类别,他提倡多使用使用 dynamic_cast 替代 typeid。当然typyid能准确判定对象的类型,而dynamic_cast不一定总能告诉我们对象的确切类型。
2C&G'@> AWG;G+ 下面是一个简单的类型判别器(不能用于基本类型,如int、double等):
O'i!}$=g 代码: 全选/*
-,Oq=w*EV * File: TypeUtils.h
U?[_ d * Author: kwarph [
kwarph@gmail.com ]
p_g#iH!* * Time: 2009-3-21 下午03:25:02
7C::%OF~7 *
G%q^8# * Copyright (C) 2008-2009, kwarph, All Rights Reserved.
BPwn!ii| */
wJr5[p*M nRSiW*;R #ifndef TYPEUTILS_H_
kLfk2A;' i #define TYPEUTILS_H_
Y+kfMA v m) -DrbE template<typename T>
JHvawFBN<u struct InstanceOf {
A#@9|3 !,0%ZG}]7 template<typename T1>
|GLh|hr static bool test(const T1*& ptr) {
uexm|5| const T* t = dynamic_cast<const T*> (ptr);
|u@/,x/t return t != 0;
zQ=c6xvm8 }
gd,3}@@SH T!F0_< template<typename T1>
5dNM:1VoE static bool test(T1*& ptr) {
d8p<f+ T* t = dynamic_cast<T*> (ptr);
M#CYDEB return t != 0;
c2o.H!> }
-yJ%G1R "N*bV template<typename T1>
dU"ca|u static const T* get(const T1*& ptr) {
Y;uQq-C P const T* t = dynamic_cast<const T*> (ptr);
N6%wHNYZ return t;
^F? }MY> }
.m^L,;+2 e%wzcn template<typename T1>
{pR4+g static T*& get(T1*& ptr) {
~ 7^#. return dynamic_cast<T*> (ptr);
xaw)iC[gI{ }
! !we4tWq };
-H+<81"B# dW4FMm>| #endif /* TYPEUTILS_H_ */
p "Cxe R?E< }\! Q Q: 570508473
Xk]:]pl4W 邮 件:
athzhang@gmail.com /]@1IC{Lk 电 话:(0512) 55253348,(0) 18912671348
a:V2(nY 地 址:江苏省 昆山市 前进西路1088号虹桥大厦 2单元 6楼
2Vwv#NAV k