把一个非延缓评估的元函数转换为一个延缓评估的元函数(Lazy evaluation)
2013-12-04 15:22
323 查看
在C++的模板元编程中,如果使用了T::type , T::value , T::apply之类的语法,其将导致编译器立马对该类型表达式进行求值,有些时候,这些求值工作是不必要的,将增加编译器的编译时间,我们可以将之延迟到最后一刻确实需要进行类型计算的时候再去求值,此称之为Lazy evaluation。
下面通过Lazy_If_T 为例演示了如何把一个非延缓评估的元函数转换为延迟评估的元函数----此模板源代码的应用示例可以到我的资源中的"博客中的mini泛型库源代码"中去下载。
template<bool,typename True_T,typename False_T> struct If_T //default is true
{
typedef True_T type;
};
template<typename True_T,typename False_T> struct If_T<false,True_T,False_T>
{
typedef False_T type;
};
//for lazy evaluation
template<typename B,typename True_T,typename False_T> struct Lazy_If_T : public If_T<B::value,True_T,False_T>::type
{};
//---------使用Lazy_If_T ,编译器将不会对Lazy_If_T 的type立即进行求值计算,而仅仅作一个类型标记,待到确实需要时,再进行计算,节省了编译时间。
下面通过Lazy_If_T 为例演示了如何把一个非延缓评估的元函数转换为延迟评估的元函数----此模板源代码的应用示例可以到我的资源中的"博客中的mini泛型库源代码"中去下载。
template<bool,typename True_T,typename False_T> struct If_T //default is true
{
typedef True_T type;
};
template<typename True_T,typename False_T> struct If_T<false,True_T,False_T>
{
typedef False_T type;
};
//for lazy evaluation
template<typename B,typename True_T,typename False_T> struct Lazy_If_T : public If_T<B::value,True_T,False_T>::type
{};
//---------使用Lazy_If_T ,编译器将不会对Lazy_If_T 的type立即进行求值计算,而仅仅作一个类型标记,待到确实需要时,再进行计算,节省了编译时间。
相关文章推荐
- 怎样评估一个程序员?
- More Effective C++ 条款17 考虑使用lazy evaluation(缓式评估)
- 如何评估一个ECG分析算法或设备
- 秀一个django写的网站: 搜索引擎优化综合评估系统
- Grank:如何评估一个 Github 项目的活跃度
- 一个人做一个网站需要做的工作量评估
- mahout评估一个简单的推荐程序
- 开发一个评估系统选什么开发平台好
- 一个评估大规模软件项目工作量的公式
- 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?
- 8. Establish a single-number evaluation metric for your team to optimize 建立一个单一数字的评估指标(MACHINE LE
- 一个界面实现问卷调查和评估结果
- 如何去评估一个Story的时间?
- 评估一个预测模型性能通常都有那些指标
- 如何评估一个业务的好坏
- 如何评估一个好的BPM产品
- 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?
- 一个绩效评估公式的建立的小游戏
- 如何评估一个网站的价值?
- 怎样评估一个程序员?