gpt4 book ai didi

c++ - 如何为基础类型 int 的枚举专门化一个类?

转载 作者:可可西里 更新时间:2023-11-01 17:34:26 26 4
gpt4 key购买 nike

#include <type_traits>

enum class MyEnum
{
Hello
};

template <typename T, typename Enable = void>
class MyClass
{
public:
MyClass(T obj) : e(obj)
{}

private:
T e;
};

template <typename T>
class MyClass <T,
typename std::enable_if< std::is_enum<T>::value
&& std::is_same<typename std::underlying_type<T>::type,
int>::value>::type >
{
public:
MyClass(T obj) : e(obj)
{}

private:
T e;
};

int main()
{
MyClass<MyEnum> c(MyEnum::Hello);
MyClass<int> c1(1); //does not compile due to std::underlying_type
return 0;
}

我希望能够将 MyClass 专门用于基础类型“int”的枚举。我不能使用 std::underlying_type 来做到这一点,因为它只特定于枚举。关于如何继续的任何想法?

最佳答案

解决这个怪癖的一个足够简单的解决方案是将 std::underlying_type 隔离在您自己的 SFINAE 友好特征后面:

template <class T, class = void>
struct underlying_type {};

template <class T>
struct underlying_type<
T,
typename std::enable_if<std::is_enum<T>::value>::type
> {
using type = typename std::underlying_type<T>::type;
};

那么你的专长可以写成:

template <typename T>
class MyClass<
T,
typename std::enable_if<std::is_same<
typename underlying_type<T>::type,
int
>::value>::type
> {
// ...
};

关于c++ - 如何为基础类型 int 的枚举专门化一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com