+enum Type
+{
+ INTEGER,
+ FLOAT,
+ STRING,
+ BOOLEAN,
+ ENUM
+};
+
+template<typename T> struct TypeResolver { static const Type type=ENUM; };
+template<> struct TypeResolver<short> { static const Type type=INTEGER; };
+template<> struct TypeResolver<unsigned short> { static const Type type=INTEGER; };
+template<> struct TypeResolver<int> { static const Type type=INTEGER; };
+template<> struct TypeResolver<unsigned> { static const Type type=INTEGER; };
+template<> struct TypeResolver<long> { static const Type type=INTEGER; };
+template<> struct TypeResolver<unsigned long> { static const Type type=INTEGER; };
+template<> struct TypeResolver<long long> { static const Type type=INTEGER; };
+template<> struct TypeResolver<unsigned long long> { static const Type type=INTEGER; };
+template<> struct TypeResolver<float> { static const Type type=FLOAT; };
+template<> struct TypeResolver<double> { static const Type type=FLOAT; };
+template<> struct TypeResolver<bool> { static const Type type=BOOLEAN; };
+template<> struct TypeResolver<std::string> { static const Type type=STRING; };
+template<typename T> struct TypeResolver<const T> { static const Type type=TypeResolver<T>::type; };
+template<typename T> struct TypeResolver<T &> { static const Type type=TypeResolver<T>::type; };
+template<typename T> struct TypeResolver<const T &> { static const Type type=TypeResolver<T>::type; };
+