簡體   English   中英

專門的模板根據變量類型返回/設置枚舉值

[英]Specialised template return/set an enum value based on the variable type

如果我有一個枚舉定義為...

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

這樣我就可以稱之為結構

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

auto y = get_value<int>::value; // == MyValue::A

在c ++中是否有可能,如何實現?

具有以下內容:

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

演示版

C ++ 14添加了Variable模板 ,您也可以使用它們:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM