把一个非延缓评估的元函数转换为一个延缓评估的元函数(Lazy evaluation)

在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立即进行求值计算,而仅仅作一个类型标记,待到确实需要时,再进行计算,节省了编译时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值