- #include <iostream>
- using namespace std;
- template<int n>struct Factorial{
- enum{val=Factorial<n-1>::val*n};
- };
- template<> struct Factorial<0>{
- enum{val=1};
- };
- template<int N,int P> struct Power{
- enum{val=N*Power<N,P-1>::val};
- };
- template<int N>struct Power<N,0>{
- enum{val=1};
- };
- template<int n,template<int> class Func>struct Accumulate{
- enum{val=Accumulate<n-1,Func>::val+Func<n>::val};
- };
- template<template<int>class Func> struct Accumulate<0,Func>{
- enum{val=Func<0>::val};
- };
- template<int n>struct Identity{
- enum{val=n};
- };
- template<int n>struct Square{
- enum{val=n*n};
- };
- template<int n>struct Cube{
- enum{val=n*n*n};
- };
- int main(){
- cout<<Factorial<12>::val<<endl; //479001600
- cout<<Power<2,5>::val<<endl; //32
- cout<<Accumulate<4,Identity>::val<<endl; //10
- cout<<Accumulate<4,Square>::val<<endl; //30
- cout<<Accumulate<4,Cube>::val<<endl; //100
- system("pause");
- }
template metaprogram
最新推荐文章于 2021-04-05 10:02:47 发布