00001 template<int N> struct Enumerate{char i[N];}; 00002 Enumerate<0> enumerate(const unsigned char&); 00003 Enumerate<1> enumerate(const char&); 00004 Enumerate<2> enumerate(const int&); 00005 Enumerate<3> enumerate(const unsigned int&); 00006 Enumerate<4> enumerate(const float&); 00007 Enumerate<5> enumerate(const double&); 00008 Enumerate<6> enumerate(const std::complex<float>&); 00009 Enumerate<7> enumerate(const std::complex<double>&); 00010 template<int N> struct DeEnumerate{}; 00011 template<> struct DeEnumerate<0>{typedef unsigned char type;}; 00012 template<> struct DeEnumerate<1>{typedef char type;}; 00013 template<> struct DeEnumerate<2>{typedef int type;}; 00014 template<> struct DeEnumerate<3>{typedef unsigned int type;}; 00015 template<> struct DeEnumerate<4>{typedef float type;}; 00016 template<> struct DeEnumerate<5>{typedef double type;}; 00017 template<> struct DeEnumerate<6>{typedef std::complex<float> type;}; 00018 template<> struct DeEnumerate<7>{typedef std::complex<double> type;};