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++设计新思维》(2) Int2Type的意义
Posted on 2006-01-24 02:20
Tommy Liang
阅读(1054)
评论(0)
编辑
收藏
引用
所属分类:
泛型编程与设计模式
就是这么一个模板结构,所有的价值在于编译时刻根据常数调用不同函数或者编译期实施编译分支的分派。
template
<
int
v
>
struct
Int2Type
{
enum
{ value
=
v }
;
}
;
如下:
template
<
typename T,
bool
isPolimorphic
>
class
NiftyContainer
{
private
:
void
DoSomething( T
*
pObj, Int2Type
<
true
>
)
{
T
*
pNewObj
=
pObj
->
Clone();
}
void
DoSomething( T
*
pObj, Int2Type
<
false
>
)
{
T
*
pNewObj
=
new
T(
*
pObj);
}
public
:
void
DoSomething(T
*
pObj)
{
DoSomething(pObj, Int2Type
<
isPolimorphic
>
());
}
}
;
如果没有这个 Int2Type,是不可能实现两个“重载”函数 DoSomething( .. Int2Type<true>)和 DoSomething(...Int2Type<false>)的,NiftyContainer的参数 isPolimorphic只能取true或者false,实际上编译出来的要么是前一个函数,要么是后一个函数。
如果没有这个Int2Type,最容易想到的就是像下面这样做:
if (isPolimorphic)
{
T * pNewObj = pSomeObj->Clone();
}
else
{
T * pNewObj = new T (*pSomeObj);
}
如果多态算法使用 pObj->Clone(),那么对于任何一个未曾定义 Clone函数(即isPolimorphic==false)的类来说,这里的前一个分支是编译失败的。反之,如果 isPolimorphic == true,是不是后面那个分支就保证没问题,一定能通过呢?不是的,如果有一个类设计成为有 Clone函数,但是构造函数是私有的,就不行咯。
所以, Int2Type是跟编译器说:嘿,不要去管那个我不关心的分支。
妙啊!
只有注册用户
登录
后才能发表评论。
【推荐】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
知识库
博问
管理
Powered by:
C++博客
Copyright © Tommy Liang
日历
<
2006年1月
>
日
一
二
三
四
五
六
25
26
27
28
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
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(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关键字(9992)
2. 四元数入门(8520)
3. 读书笔记《C++设计新思维》(7) std::type_info类的包装类(4061)
4. 最简单的堆栈溢出demo(2649)
5. Qt moc 的一个诡异提示(2299)
评论排行榜
1. 关于C++的 explicit关键字(6)
2. 最简单的堆栈溢出demo(4)
3. 读书笔记《C++设计新思维》(1) Template Template 参数(2)
4. 读书笔记《C++设计新思维》(5) 编译期间侦测可转换性(2)
5. 计时辅助类(1)