如果我将枚举定义为......
./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 ++中,如果是这样,它怎么可能实现?
答案 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;
};
答案 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;
}