[英]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.