注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天地不仁,以万物为Googol!

天行有常,不以物喜,不以己悲……

 
 
 

日志

 
 

大牛!模板递归!  

2005-07-09 21:22:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
决定好好研究一下……
 
#include <iostream>
using namespace std;
// 菲波纳契数列(Fibonacci numbers)
template<int N>
class Fibonacci {
 public:      
  enum { value = Fibonacci<N-1>::value + Fibonacci<N-2>::value };
};
class Fibonacci<1> {
 public:
       enum { value = 1 };
      };
class Fibonacci<0> {
 public:      
  enum { value = 0 };
};
// 主函数
int main(int argc, char *argv[]) {
      cout << Fibonacci<10>::value << endl;      
      return 0;
}
//结果55
别人的回帖:
典型的template递归技术,是在编译期间利用模板生成技巧来计算枚举变量value的值第2,3个模板是第一个模板的特化,相当于递归中的出口。

是不是很炫啊,推荐你看看C++设计新思维,和C++ templates,还有最近的C++ template metaprogramming
 
枚举类型变量可以直接指定值,而其它类型要通过函数来设定。
 
模板应用,很多traits或policy技术中不允许出现成员函数,但是又要区别出不同的类,用enum刚好能达到这个目的。c++新思维中讲的很清楚。
 
这个在游戏开发里面很常用的吧,好像叫编译器元模版技
这样可以把很多运算放到编译期,运行起来就快多了
  评论这张
 
阅读(586)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017