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::这很好,我想这是一个风格/品味的问题,但在这种情况下,我更喜欢另一种方法。这很好,我想这是一个风格/品味的问题,但在这种情况下,我更喜欢另一种方法。