Int2Type的意义
来源:互联网 发布:photoshop的mac破解版 编辑:程序博客网 时间:2024/04/29 01:16
在很多代码中看到 Int2Type这样的结构:
template <int v>struct Int2Type{ enum { value = v };};以下笔记摘自:http://www.cppblog.com/tommy/archive/2006/01/24/2996.html就是这么一个模板结构,所有的价值在于编译时刻根据常数调用不同函数或者编译期实施编译分支的分派。
emplate <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是跟编译器说:嘿,不要去管那个我不关心的分支。 妙啊!注: 这个说明不是所有的选择问题都能用if.... else解决,哈哈,有可能两个都不选择
- Int2Type的意义
- modern c++ design Int2Type的意义
- 类型和值之间的映射(Int2Type)
- Int2Type/Type2Type
- c++设计新思维 -- Int2Type
- Int2Type 使用示例
- 的意义
- " / "的意义
- C++模版使用技巧--Int2Type
- modern c++ design Int2Type 笔记
- C++模版使用技巧--Int2Type
- modern c++ design Int2Type 笔记
- 生命的意义,在于赋予它意义
- 论Mono的意义
- 前卫的意义
- 步行交通的意义
- 学习理论的实用意义
- 补充:学习理论的意义
- 后台打开一个子窗口,显示在屏幕中间,关闭子窗体刷新子窗体代码 .
- loadrunner关联实例
- C语言基础
- 透过vs.net数据窗体向导看Ado.net
- 责任心是什么
- Int2Type的意义
- nao机器人视觉模块创建和调用
- ADO.NET中的多数据表操作浅析—修改
- rgb和hsv的互相转换
- swing初步学习,第三天
- 2011年8月29日开始学习Flex4
- Oracle RAC CSS 超时计算 及 参数 misscount, Disktimeout 说明
- ADO.NET中的多数据表操作浅析—读取
- jquery ajax跨域 jsonp