我有一个概念如下:
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/