tommy
It's hard to tell the world we live in is either a reality or a dream
posts - 52, comments - 17, trackbacks - 0, articles - 0
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
读书笔记《C++设计新思维》(7) std::type_info类的包装类
Posted on 2006-02-06 01:20
Tommy Liang
阅读(4067)
评论(0)
编辑
收藏
引用
所属分类:
泛型编程与设计模式
std::type_info类可以在执行期间查询对象型别,但使用起来比较麻烦。为此定义了wrapper
下面的代码出自 Loki库:
总得来说是提供了std::type_info的所有成员函数;
提供了value语义,即public copy构造函数和public assignment操作符;
定义了 operator< 和 operator== 等
namespace
Loki
{
/**/
//////////////////////////////////////////////////////////////////////////////
//
//
class TypeInfo
//
Purpose: offer a first-class, comparable wrapper over std::type_info
/**/
//////////////////////////////////////////////////////////////////////////////
//
class
TypeInfo
{
public
:
//
Constructors
TypeInfo();
//
needed for containers
TypeInfo(
const
std::type_info
&
);
//
non-explicit
//
Access for the wrapped std::type_info
const
std::type_info
&
Get()
const
;
//
Compatibility functions
bool
before(
const
TypeInfo
&
rhs)
const
;
const
char
*
name()
const
;
private
:
const
std::type_info
*
pInfo_;
}
;
//
Implementation
inline TypeInfo::TypeInfo()
{
class
Nil
{}
;
pInfo_
=
&
typeid(Nil);
assert(pInfo_);
}
inline TypeInfo::TypeInfo(
const
std::type_info
&
ti)
: pInfo_(
&
ti)
{ assert(pInfo_); }
inline
bool
TypeInfo::before(
const
TypeInfo
&
rhs)
const
{
assert(pInfo_);
return
pInfo_
->
before(
*
rhs.pInfo_)
!=
0
;
}
inline
const
std::type_info
&
TypeInfo::Get()
const
{
assert(pInfo_);
return
*
pInfo_;
}
inline
const
char
*
TypeInfo::name()
const
{
assert(pInfo_);
return
pInfo_
->
name();
}
//
Comparison operators
inline
bool
operator
==
(
const
TypeInfo
&
lhs,
const
TypeInfo
&
rhs)
{
return
(lhs.Get()
==
rhs.Get())
!=
0
; }
inline
bool
operator
<
(
const
TypeInfo
&
lhs,
const
TypeInfo
&
rhs)
{
return
lhs.before(rhs); }
inline
bool
operator
!=
(
const
TypeInfo
&
lhs,
const
TypeInfo
&
rhs)
{
return
!
(lhs
==
rhs); }
inline
bool
operator
>
(
const
TypeInfo
&
lhs,
const
TypeInfo
&
rhs)
{
return
rhs
<
lhs; }
inline
bool
operator
<=
(
const
TypeInfo
&
lhs,
const
TypeInfo
&
rhs)
{
return
!
(lhs
>
rhs); }
inline
bool
operator
>=
(
const
TypeInfo
&
lhs,
const
TypeInfo
&
rhs)
{
return
!
(lhs
<
rhs); }
}
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
递归数查寻表
读书笔记《C++设计新思维》(8) 边界标记:NullType和EmptyType
读书笔记《C++设计新思维》(7) std::type_info类的包装类
读书笔记《C++设计新思维》(6) 编译期间侦测继承性
读书笔记《C++设计新思维》(5) 编译期间侦测可转换性
读书笔记《C++设计新思维》(4) Type Selection
读书笔记《C++设计新思维》(3) Type2Type的意义
读书笔记《C++设计新思维》(2) Int2Type的意义
读书笔记《C++设计新思维》(1) Template Template 参数
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © Tommy Liang
日历
<
2010年9月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
away3d(2)
C++语言与规范(5)
development idea(2)
Unix(1)
读书笔记《C++图算法》(3)
泛型编程与设计模式(9)
机器人(1)
进程与线程(3)
数学(2)
随笔档案
2015年1月 (1)
2013年8月 (1)
2013年1月 (1)
2012年12月 (1)
2012年5月 (1)
2012年4月 (1)
2012年3月 (1)
2011年11月 (3)
2011年6月 (3)
2011年5月 (1)
2011年3月 (2)
2011年1月 (1)
2010年10月 (1)
2010年9月 (5)
2009年7月 (3)
2009年3月 (2)
2006年4月 (3)
2006年2月 (9)
2006年1月 (2)
2005年12月 (7)
2005年10月 (3)
搜索
最新评论
1. re: 读书笔记《C++设计新思维》(3) Type2Type的意义
这2个有什么不同呢。
开销估计也差不多。
我觉得2者可能的不同还是在可扩展性上面。
--kaso
2. re: 邻接表 SparseMultiGRAPH
remove好像不太对吧,我们只是删一条边,你的删了很多呀
--windward
3. re: 最简单的堆栈溢出demo
在哪儿有个/gz 啊大哥
--石头儿
4. re: 最简单的堆栈溢出demo
int *eip = (int*)&hackstr[24]; //20->23是EBP
这一行中的[24]应该改成[20]吧,我是arm指令
--nuke
5. re: 关于C++的 explicit关键字
透彻,明白了
--一样一样
阅读排行榜
1. 关于C++的 explicit关键字(9998)
2. 四元数入门(8520)
3. 读书笔记《C++设计新思维》(7) std::type_info类的包装类(4067)
4. 最简单的堆栈溢出demo(2652)
5. Qt moc 的一个诡异提示(2316)
评论排行榜
1. 关于C++的 explicit关键字(6)
2. 最简单的堆栈溢出demo(4)
3. 读书笔记《C++设计新思维》(1) Template Template 参数(2)
4. 读书笔记《C++设计新思维》(5) 编译期间侦测可转换性(2)
5. 计时辅助类(1)