作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
#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/
我有一个如下所示的数据框: person n start end 1 sam 6 0 6 2 greg 5 6 11 3 te
直到大约 1-2 个月前 android构建(任何应用程序的)在 Android Galaxy S 上完美运行.现在无法在此设备上安装 buid。我添加了标志 codename1.arg.androi
背景: 我的类(class)名为 ObjectListModel继承QAbstractListModel并包含 QObjectList .对象是行,它们的属性是列(使用 QMetaObject 设置)
我有一个 flex div (.parent) 和包含更多行的子 div(您猜对了,.child)。我的问题是我似乎无法在不破坏我的“网格”的情况下让每个 div .card 的边框具有相同的高度。当
我是一名优秀的程序员,十分优秀!