C++ 类型特征的概念

标签 c++ type-traits c++-concepts

我有一个概念如下:

template<class T>
concept Reader = requires(T a)
{...};

我想要一个类型特征来检查一个类是否符合 Reader概念-类似is_reader<myclass>::value如何实现这一目标?

到目前为止我的尝试是这样的:

template<typename T>
struct is_reader : std::false_type;

template<Reader T>
struct is_reader : std::true_type;

由于重新声明模板类型,因此无法编译。

我也尝试过:

template<typename T>
struct is_reader : std::false_type;

template<>
struct is_reader<Reader auto> : std::true_type;

虽然可以编译,但不起作用。

如何使这项工作有效? 为什么我的第二次尝试不起作用 - 它在做什么?

最佳答案

正确的做法是

template<class T>
concept Reader = requires(T a) {...};

template<typename T>
struct is_reader : std::false_type {};

template<Reader T>
struct is_reader<T> : std::true_type {};

关于C++ 类型特征的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75874637/

相关文章:

c++ - RDTSCP 和指令顺序

c++ - 有条件静态?

c++ - enable_if 和 is_move_constructible 允许不可移动类型,但 require 不允许

c++ - operator= 在子类中

c++ - 不调用拷贝构造函数?

c++ - 从 vector 中删除元素时出错

c++ - 使用enable_if根据模板类型隐藏成员函数

检查可变参数模板中没有重复类型的 C++ 概念

c++ - 用 C++ 编写和检查自己的概念

c++ - 使用概念启用类模板的成员函数