#include <type_traits>
enum class MyEnum
{
Hello
};
template <typename T, typename Enable = void>
class MyClass
{
public:
MyClass(T obj) : e(obj)
{}
private:
T e;
};
template <typename T>
class MyClass <T,
typename std::enable_if< std::is_enum<T>::value
&& std::is_same<typename std::underlying_type<T>::type,
int>::value>::type >
{
public:
MyClass(T obj) : e(obj)
{}
private:
T e;
};
int main()
{
MyClass<MyEnum> c(MyEnum::Hello);
MyClass<int> c1(1); //does not compile due to std::underlying_type
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够将MyClass专门用于底层类型'int'的枚举.我不能使用std :: underlying_type这样做,因为它只针对枚举.关于如何进行的任何想法?