template metaprogram

来源:互联网 发布:焦虑症如何克服知乎 编辑:程序博客网 时间:2024/06/07 03:44
  1. #include <iostream>
  2. using namespace std;
  3. template<int n>struct Factorial{
  4.  enum{val=Factorial<n-1>::val*n};
  5. };
  6. template<> struct Factorial<0>{
  7.  enum{val=1};
  8. };
  9. template<int N,int P> struct Power{
  10.  enum{val=N*Power<N,P-1>::val};
  11. };
  12. template<int N>struct Power<N,0>{
  13.  enum{val=1};
  14. };
  15. template<int n,template<intclass Func>struct Accumulate{
  16.  enum{val=Accumulate<n-1,Func>::val+Func<n>::val};
  17. };
  18. template<template<int>class Func> struct Accumulate<0,Func>{
  19.  enum{val=Func<0>::val};
  20. };
  21. template<int n>struct Identity{
  22.  enum{val=n};
  23. };
  24. template<int n>struct Square{
  25.  enum{val=n*n};
  26. };
  27. template<int n>struct Cube{
  28.  enum{val=n*n*n};
  29. };
  30. int main(){
  31.  cout<<Factorial<12>::val<<endl;   //479001600
  32.  cout<<Power<2,5>::val<<endl;      //32
  33.  cout<<Accumulate<4,Identity>::val<<endl;  //10
  34.  cout<<Accumulate<4,Square>::val<<endl;    //30
  35.  cout<<Accumulate<4,Cube>::val<<endl;      //100
  36.  system("pause");
  37. }
原创粉丝点击