Listing 11
template<class NList, unsigned short Len=0> struct IntegrateTerm3; template<unsigned short Len> struct IntegrateTerm3<NL::NullType,Len> { enum { numerator=1, denominator=Len }; }; template<int Num, class Tail, unsigned short Len> struct IntegrateTerm3<Numlist<Num,Tail>,Len> { private: typedef IntegrateTerm3<Tail,Len+1> temp; public: enum { numerator = Factorial<Num>::value * temp::numerator, denominator = Num + temp::denominator }; }; template<class TList> struct Integrate3; template<> struct Integrate3<Loki::NullType> { inline static double val() { return 0; } }; template<int Num, class T, class Tail> struct Integrate3<Typelist<Numlist<Num,T>,Tail> > { private: typedef IntegrateTerm3<T> iterm; public: inline static double val() { return Num*iterm::numerator /(double)Factorial<iterm::denominator>::value + Integrate3<Tail>::val(); } };