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