专用模板根据变量类型返回/设置枚举值

时间:2016-08-21 09:28:47

标签: c++ templates enums c++14

如果我将枚举定义为......

./gradlew :no:uploadArchives

我想创建一个专门的模板,根据变量类型本身返回/设置类型

enum MyValue
{
  Unk,
  A,
  B
};

这样我可以调用struct

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 
};

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

这可能在c ++中,如果是这样,它怎么可能实现?

2 个答案:

答案 0 :(得分:1)

以下内容:

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;
};

Demo

答案 1 :(得分:1)

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

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;
}

但它们使用的有点不同:

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;
}