如何实现is_enum_class类型特征?

印加

当且仅当传入的T类型是类枚举时,如何才能实现其值成员为true的类型特征?虽然我知道例如

+T{};

如果T是一个枚举,它将起作用,而如果它是一个枚举类,它将失败,到目前为止,我找不到将其用于SFINAE的方法。

皮特·斯科特尼克

根据您的+T{}测试:

选项1:

尾随返回类型的表达式SFINAE:

#include <type_traits>

template <typename T>
auto test(int) -> decltype((void)+T{}, std::false_type{});

template <typename T>
auto test(...) -> std::true_type;

template <typename T>
using is_enum_class = std::integral_constant<bool, decltype(test<T>(0))::value && std::is_enum<T>::value>;

演示

选项2:

void_t-fashion中

template <typename T, typename V = void>
struct test : std::false_type {};

template <typename T>
struct test<T, decltype((void)+T{})> : std::true_type {};

template <typename T>
using is_enum_class = std::integral_constant<bool, !test<T>::value && std::is_enum<T>::value>;

演示2

测试:

enum class EC { a, b };
enum E { c, d };

int main()
{
    static_assert(is_enum_class<EC>::value, "!");
    static_assert(!is_enum_class<E>::value, "!");
    static_assert(!is_enum_class<int>::value, "!");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何表示返回的关联类型实现了特征?

来自分类Dev

如何实现“嵌套类型或无效”特征?

来自分类Dev

实现特征时如何在类型上施加特征约束?

来自分类Dev

类型“ A”未实现特征“ A”

来自分类Dev

如何在rust的通用特征上实现特定类型?

来自分类Dev

如何为任何可迭代类型实现特征?

来自分类Dev

为通用类型实现特征,为通用类型实现特征

来自分类Dev

限制可能实现特征的类型

来自分类Dev

单位类型实现了哪些特征?

来自分类Dev

类型'&'a A +'a'没有实现特征'A`。

来自分类Dev

如何实现Rust的Copy特征?

来自分类Dev

实现具有关联特征类型的特征

来自分类Dev

特征中未实现方法的返回类型

来自分类Dev

为大型数组类型实现调试特征

来自分类Dev

在方法中使用类型参数实现特征

来自分类Dev

Rust:为相关类型实现特征“从”(错误)

来自分类Dev

实现基本类型的特征(浮动)

来自分类Dev

特征中未实现方法的返回类型

来自分类Dev

实现特征时类型不匹配

来自分类Dev

如何克服具有不兼容类型的匹配臂来实现相同特征的结构?

来自分类Dev

如何为我不拥有的类型实现我不拥有的特征?

来自分类Dev

如何在各种类型的IntoIterator项上允许特征的多种实现?

来自分类Dev

如何为给定类型选择不同的std :: cmp :: Ord(或其他特征)实现?

来自分类Dev

如何实现工厂特征返回具有匹配类型参数的泛型值?

来自分类Dev

如何实现采用参数化特征的子类型并返回它的scala泛型函数

来自分类Dev

如何对包含实现特征的不同类型的链表进行静态分派?

来自分类Dev

如何在宏中的编译期间列出给定类型的所有已实现特征?

来自分类Dev

重新实现一个实现特征的类型(打包)

来自分类Dev

当实现我需要的所有特征以引用该类型时,如何将类型直接存储在结构中?

Related 相关文章

  1. 1

    如何表示返回的关联类型实现了特征?

  2. 2

    如何实现“嵌套类型或无效”特征?

  3. 3

    实现特征时如何在类型上施加特征约束?

  4. 4

    类型“ A”未实现特征“ A”

  5. 5

    如何在rust的通用特征上实现特定类型?

  6. 6

    如何为任何可迭代类型实现特征?

  7. 7

    为通用类型实现特征,为通用类型实现特征

  8. 8

    限制可能实现特征的类型

  9. 9

    单位类型实现了哪些特征?

  10. 10

    类型'&'a A +'a'没有实现特征'A`。

  11. 11

    如何实现Rust的Copy特征?

  12. 12

    实现具有关联特征类型的特征

  13. 13

    特征中未实现方法的返回类型

  14. 14

    为大型数组类型实现调试特征

  15. 15

    在方法中使用类型参数实现特征

  16. 16

    Rust:为相关类型实现特征“从”(错误)

  17. 17

    实现基本类型的特征(浮动)

  18. 18

    特征中未实现方法的返回类型

  19. 19

    实现特征时类型不匹配

  20. 20

    如何克服具有不兼容类型的匹配臂来实现相同特征的结构?

  21. 21

    如何为我不拥有的类型实现我不拥有的特征?

  22. 22

    如何在各种类型的IntoIterator项上允许特征的多种实现?

  23. 23

    如何为给定类型选择不同的std :: cmp :: Ord(或其他特征)实现?

  24. 24

    如何实现工厂特征返回具有匹配类型参数的泛型值?

  25. 25

    如何实现采用参数化特征的子类型并返回它的scala泛型函数

  26. 26

    如何对包含实现特征的不同类型的链表进行静态分派?

  27. 27

    如何在宏中的编译期间列出给定类型的所有已实现特征?

  28. 28

    重新实现一个实现特征的类型(打包)

  29. 29

    当实现我需要的所有特征以引用该类型时,如何将类型直接存储在结构中?

热门标签

归档