C++模板编程:如何在编译器确定斐波那契数列?
2010-07-03 17:54
369 查看
使用模板元技术:
我们可以看到,上面实际上运用到了递归,递归总要有一个结束的时候,因此我们需要为它写两个特化版本:
这样,我们就可以在编译器确定斐波那契数列的具体值了,下面是一个测试程序:
输出结果是:
1 1 2 3 5 8
template <int num> struct Fibonacci { enum { result = Fibonacci<num-1>::result + Fibonacci<num-2>::result }; };
我们可以看到,上面实际上运用到了递归,递归总要有一个结束的时候,因此我们需要为它写两个特化版本:
template<> struct Fibonacci<0> { enum { result = 1 }; }; template<> struct Fibonacci<1> { enum { result = 1 }; };
这样,我们就可以在编译器确定斐波那契数列的具体值了,下面是一个测试程序:
int _tmain(int argc, _TCHAR* argv[]) { printf("%d ", (int)(Fibonacci<0>::result)); printf("%d ", (int)(Fibonacci<1>::result)); printf("%d ", (int)(Fibonacci<2>::result)); printf("%d ", (int)(Fibonacci<3>::result)); printf("%d ", (int)(Fibonacci<4>::result)); printf("%d/n", (int)(Fibonacci<5>::result)); return 0; }
输出结果是:
1 1 2 3 5 8
相关文章推荐
- C++模板编程:如何使非通用的模板函数实现声明和定义分离
- C++模板编程中如何检测一个变量是否为编译期常量?
- 转:你应当如何学习C++(以及编程)(rev#1)
- 如何成为一个游戏制作人——第三章:过程式编程语法(详细请自学<<C++Primer>>)
- C++模板编程及函数对象
- C++模板编程->分辨重载优先级
- C++如何拒绝编译器自动生成的函数
- 分享:篮子、水果和鸡蛋——关于C++的模板偏特化和萃取编程技法
- 元旦快乐,阖家团圆,幸福安康.C#重载示例(有问重载该如何选择?在C#中可很方便地在智能感知弹出中选择不同参数列表进行使用;不像C/C++那样,要记住编译器自动选择最佳匹配参数列表的概念)
- 你应当如何学习C++(以及编程)(rev#1)
- clang 编译器如何查看 c++对象的memery layout
- c++模板类(一)理解编译器的编译模板过程
- 你应当如何学习C++(以及编程)(rev#1)
- C/C++编程细节(三)——类、继承、模板、运算符重载
- C++模板的缺点以及如何避免
- 你应当如何学习C++(以及编程)
- Unix/Linux环境C编程入门教程(22) C/C++如何获取程序的运行时间
- c++ 基于Policy 的 模板编程
- 如何确定VS编译器版本--_MSC_VER || #if _MSC_VER > 1000 #pragma once #endif
- 你应当如何学习C++(以及编程)