C++11 C++;11如何将枚举类模板参数强制转换为int?

C++11 C++;11如何将枚举类模板参数强制转换为int?,c++11,templates,casting,template-meta-programming,enum-class,C++11,Templates,Casting,Template Meta Programming,Enum Class,我有一个结构,它在模板参数上接受枚举类值 template <typename EnumValue> struct Type { public: static constexpr int VALUE = static_cast<int>(EnumValue); }; enum class MyEnum {Val1, Val2}; std::cout << Type<MyEnum::Val2>::VALUE << std::e

我有一个结构,它在模板参数上接受枚举类值

template <typename EnumValue>
struct Type
{
public:
    static constexpr int VALUE = static_cast<int>(EnumValue);
};

enum class MyEnum {Val1, Val2};

std::cout << Type<MyEnum::Val2>::VALUE << std::endl;
模板
结构类型
{
公众:
static constexpr int VALUE=static_cast(枚举值);
};
枚举类MyEnum{Val1,Val2};
你不能吗。
typename EnumValue
声明一个类型,它不是一个值。在C++11中,不能将
类型
枚举类
一起使用


在C++17中,您将能够编写满足您需要的
模板

正如@Caleth所提到的,您需要为
类型
结构指定枚举类型和枚举值。但是,如果您不想更改模板参数,为什么不在
Type
中使用静态方法呢

template <typename EnumType>
struct Type
{
public:
   static constexpr int getValue(EnumType value)
   {
      return static_cast<int>(value);
   }
};

enum class MyEnum { Val1, Val2 };


int main()
{
   std::cout << Type<MyEnum>::getValue(MyEnum::Val2) << std::endl;
}
模板
结构类型
{
公众:
静态constexpr int getValue(枚举类型值)
{
返回静态_cast(值);
}
};
枚举类MyEnum{Val1,Val2};
int main()
{

std::cout没有办法使用helper结构来实现吗?或者在c++11中没有办法使用这个解决方案吗?我不能在我的应用程序中使用c++17project@MojtabaShahbazi您需要两个模板参数,一个用于类型,另一个用于值。如果您可以使用其他方法,那么创建另一个类模板(如
template Helper)如何
然后使用
类型
?删除它来自哪个枚举的任何信息,但是,根据您想要实现的目标,可能无法实现这些信息。@Aziuth enum类不能隐式转换为int,它需要强制转换。
template <typename EnumType, EnumType EnumValue>
struct Type...
template <typename EnumType>
struct Type
{
public:
   static constexpr int getValue(EnumType value)
   {
      return static_cast<int>(value);
   }
};

enum class MyEnum { Val1, Val2 };


int main()
{
   std::cout << Type<MyEnum>::getValue(MyEnum::Val2) << std::endl;
}