有没有办法在新概念的声明中使用其他概念?
考虑以下示例:
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)
有人对如何解决这个问题有想法吗?