以前听说有人做过,这两天想起来自已写了个试试 #include <iostream> using namespace std; template<int Bool,typename First,typename Second> struct Select { typedef First Value; }; template<typename First,typename Second> struct Select<0,First,Second> { typedef Second Value; }; template<int Num> struct Number { typedef typename Number<Num - 1>::Pre PreP; enum { Value = Num}; typedef typename PreP::template PMap<Num> DM; enum { IsPrim = DM::Value }; typedef typename Select< IsPrim,Number,PreP >::Value Pre; template<int X> struct PMap { typedef typename PreP::template PMap<X> DM; enum { Value = DM::Value?X%Num:0 }; }; }; template<> struct Number<2> { typedef int PreP; typedef Number<2> Pre; enum { Value = 2}; enum { IsPrim = 1 }; template<int X> struct PMap { enum { Value = X%2 }; }; }; template<typename Type> inline void outPrim() { outPrim<typename Type::PreP>(); cout << Type::Value << ' '; } template<> inline void outPrim<int>(){} int main() { outPrim<Number<400>::Pre>(); char key; cin >> key; return 0; } 在VS EXPRESS 2008,GCC 4.40上编译通过,不过超过500的话会编译不了.