gpt4 book ai didi

c++ - 如何将 C++20 约束的多个返回类型要求合并为一个返回类型要求?

转载 作者:行者123 更新时间:2023-12-03 06:49:19 26 4
gpt4 key购买 nike

目前,我已经实现了 Allocator 概念(指的是 Boost proposal )使用 C++20 constraints and concepts :

#include <concepts>
#include <iterator>

template <class A>
concept allocator =
std::copy_constructible<A> &&
std::equality_comparable<A> &&
requires(A a) {
{ a.allocate(0) } -> std::regular;
{ a.allocate(0) } -> std::constructible_from<std::nullptr_t>;
{ a.allocate(0) } -> std::equality_comparable_with<std::nullptr_t>;
{ a.allocate(0) } -> std::random_access_iterator;
{ *a.allocate(0) } -> std::same_as<typename A::value_type&>;
};
您可以看到相同的 allocate 有多个返回类型要求。功能。有没有办法将它们组合成一个单一的返回类型要求,如下所示?
{ a.allocate(0) } -> std::regular &&
std::constructible_from<std::nullptr_t> &&
std::equality_comparable_with<std::nullptr_t> &&
std::random_access_iterator;

最佳答案

对于这种特殊情况,您应该更密切地遵循这个概念。 allocator_traits<A>::allocate的返回类型必须是 allocator_traits<A>::pointer .所以这就是你应该测试的。是allocator_traits<A>::pointer必须满足连续迭代器和可为空指针的各种约束。
所以代码应该是这样的:

template<typename P>
concept nullable_pointer =
std::regular<P> &&
std::convertible_to<std::nullptr_t, P> &&
std::assignable_from<P&, std::nullptr_t> &&
std::equality_comparable_with<P, std::nullptr_t>


template<typename P>
concept allocator_pointer =
nullable_pointer<P> &&
std::contiguous_iterator<P>;

template<typename A>
concept allocator =
std::copy_constructible<A> &&
std::equality_comparable<A> &&
requires(A a)
{
{ a.allocate(0) } -> allocator_pointer;
};

关于c++ - 如何将 C++20 约束的多个返回类型要求合并为一个返回类型要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63147287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com