use C ++ 11 and SFINAE.
#include <type_traits> template<typename T, typename = void> struct Specialize { }; template<typename T> struct Specialize<T, typename std::enable_if<std::is_enum<T>::value>::type> { void convert() { } }; enum E { }; int main() { Specialize<E> spec; spec.convert(); }
Without C ++ 11, use boost::enable_if and boost::is_enum
source share