在新概念中使用其他概念

时间:2020-11-06 11:06:32

标签: c++ c++20 c++-concepts

有没有办法在新概念的声明中使用其他概念?

考虑以下示例:

template<typename T>
concept serializer = requires(T& x, const int& value)
{
    { x << value } -> std::same_as<T&>;
};

这很好用,但是如果我想限制签名的功能

template<std::integral A>
serializer& operator<<(const A& value);

我尝试了多种方法,但都失败了:

template<typename T, std::integral A>
concept serializer = requires(T& x, const A& value)
{
    { x << value } -> std::same_as<T&>;
};

prog.cc:57:9: error: a concept cannot be constrained
   57 | concept serializer = requires(T& x, const A& value)

或者这是一个编译概念,但是在尝试创建一个概念函数的实例时却给我一个错误:

template<typename T, typename A>
concept serializer = requires(T& x, const A& value)
{
    requires std::integral<A>;
    { x << value } -> std::same_as<T&>;
};

prog.cc:63:11: error: wrong number of template arguments (1, should be 2)
   63 | template <serializer A>
      |           ^~~~~~~~~~
prog.cc:57:9: note: provided for 'template<class T, class A> concept serializer'
   57 | concept serializer = requires(T& x, const A& value)

有人对如何解决这个问题有想法吗?

0 个答案:

没有答案