gpt4 book ai didi

c++ - 特定类型的范围概念

转载 作者:行者123 更新时间:2023-12-02 09:58:11 24 4
gpt4 key购买 nike

在 C++ 中是否有已经定义的概念用于指定特定类型的范围 20 或在 TS 范围内?

类似于:

template < class T, class InnerType >
concept RangeOf =
requires(T&& t) {
requires std::same_as<
std::remove_cvref_t<decltype(*std::ranges::begin(t))>,
InnerType
>;
std::ranges::end(t);
};

允许,for example :

void print(const RangeOf<char> auto& char_seq) { /* ... */ }

最佳答案

不,没有。

拼写该特定概念的方式是:

template <typename R, typename V>
concept RangeOf = range<R> && same_as<range_value_t<R>, V>;

但事实证明,您可能还需要检查许多密切相关的内容。你可能真的想看看 reference输入而不是 value_type .也许那是:

template <typename R, typename V>
concept RangeOf = range<R> && same_as<range_reference_t<R>, V>;

原因是:你考虑过vector<char>&吗?成为 char 的范围或 char& 的范围?可以说,它更像是后者,而且是后者插入了更多的使用。但这并不是说前者是错误的,它也很有用,只是方式不同而已。

那你得谈谈要不要same_asconvertible_to .在某些算法中,您希望将其限制为前者,而在某些算法中,后者就足够好了。对我来说,这是需要概念模板参数的动机之一,因此:

template <typename R, template <typename> concept C>
concept RangeOf = range<R> && C<range_value_t<R>>;

这样我就可以很容易地写出RangeOf<same_as<char>>RangeOf<convertible_to<char>> ,取决于我实际想要什么。


所有这些都是说,很难知道我们真正想要什么 RangeOf ,这就是为什么不存在这样的东西。但是每个有用的特定东西都非常容易编写,因此缺少这样的东西不会给用户带来特别大的负担。

关于c++ - 特定类型的范围概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64228197/

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