C++ 概念类型特征

问题描述 投票:0回答:1

我有一个概念如下:

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;

编译时,它不起作用。

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

c++ typetraits c++-concepts
1个回答
1
投票

正确的做法是

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 {};
© www.soinside.com 2019 - 2024. All rights reserved.