C++ 专用模板基于变量类型返回/设置枚举值

C++ 专用模板基于变量类型返回/设置枚举值,c++,templates,enums,c++14,C++,Templates,Enums,C++14,如果我有一个枚举定义为 enum MyValue { Unk, A, B }; 我想创建一个专门的模板,根据变量类型本身返回/设置类型 template<typename T> struct get_value { // the 'value' should be MyValue::Unk }; template<> struct get_value<int> { // the 'value' should be MyValue::A

如果我有一个枚举定义为

enum MyValue
{
  Unk,
  A,
  B
};
我想创建一个专门的模板,根据变量类型本身返回/设置类型

template<typename T>
struct get_value
{
  // the 'value' should be MyValue::Unk 
};

template<>
struct get_value<int>
{
  // the 'value' should be MyValue::A 
};

template<>
struct get_value<double>
{
  // the 'value' should be MyValue::B 
};
模板
结构获取值
{
//“value”应该是MyValue::Unk
};
模板
结构获取值
{
//“值”应该是MyValue::A
};
模板
结构获取值
{
//“值”应该是MyValue::B
};
这样我就可以调用struct了

auto x = get_value<char>::value; // == MyValue::Unk
auto x=get_value::value;//=MyValue::Unk

auto y=get_value::value;//=MyValue::A

这是C++中可能的,如果是这样,它是如何实现的?

< P>
template<typename T>
struct get_value
{
  static constexpr MyValue value = MyValue::Unk;
};

template<>
struct get_value<int>
{
  static constexpr MyValue value = MyValue::A;
};

template<>
struct get_value<double>
{
  static constexpr MyValue value = MyValue::B;
};
模板
结构获取值
{
静态constexpr MyValue=MyValue::Unk;
};
模板
结构获取值
{
静态constexpr MyValue value=MyValue::A;
};
模板
结构获取值
{
静态constexpr MyValue value=MyValue::B;
};
具有以下功能:

template<typename T>
struct get_value
{
  static constexpr MyValue value = MyValue::Unk;
};

template<>
struct get_value<int>
{
  static constexpr MyValue value = MyValue::A;
};

template<>
struct get_value<double>
{
  static constexpr MyValue value = MyValue::B;
};
模板
结构获取值
{
静态constexpr MyValue=MyValue::Unk;
};
模板
结构获取值
{
静态constexpr MyValue value=MyValue::A;
};
模板
结构获取值
{
静态constexpr MyValue value=MyValue::B;
};

C++14添加,您也可以使用它们:

namespace get_value {
    template<typename T>
    constexpr MyValue value = MyValue::Unk;

    template<>
    constexpr MyValue value<int> = MyValue::A;

    template<>
    constexpr MyValue value<double> = MyValue::B;
}
名称空间获取\u值{
模板
constexpr MyValue value=MyValue::Unk;
模板
constexpr MyValue value=MyValue::A;
模板
constexpr MyValue value=MyValue::B;
}
不过,它们的使用略有不同:

int main() {
    std::cout << get_value::value<char> << std::endl;
    std::cout << get_value::value<int> << std::endl;
    std::cout << get_value::value<double> << std::endl;
}
intmain(){
std::coutC++14添加,您也可以使用它们:

namespace get_value {
    template<typename T>
    constexpr MyValue value = MyValue::Unk;

    template<>
    constexpr MyValue value<int> = MyValue::A;

    template<>
    constexpr MyValue value<double> = MyValue::B;
}
名称空间获取\u值{
模板
constexpr MyValue value=MyValue::Unk;
模板
constexpr MyValue value=MyValue::A;
模板
constexpr MyValue value=MyValue::B;
}
不过,它们的使用略有不同:

int main() {
    std::cout << get_value::value<char> << std::endl;
    std::cout << get_value::value<int> << std::endl;
    std::cout << get_value::value<double> << std::endl;
}
intmain(){

std::这很好,我想这是一个风格/品味的问题,但在这种情况下,我更喜欢另一种方法。这很好,我想这是一个风格/品味的问题,但在这种情况下,我更喜欢另一种方法。