gpt4 book ai didi

c++ - 为什么 "The one ranges proposal"包含每个 View 的两个名称是否有特定原因?

转载 作者:行者123 更新时间:2023-12-01 14:42:27 33 4
gpt4 key购买 nike

在 c++20 的范围库中,所有 View 都有第二个版本。
例如,std::ranges::views::filter
我们有实际的类(class),std::ranges::filter_view ,然后放入我们拥有的views命名空间std::ranges::views::filter .
根据cppreference:

The expression views::filter(E, P) is expression-equivalent tofilter_view{E, P} for any suitable subexpressions E and P.


为什么所有 View 都包含在范围命名空间中的实际类中,带有 View 后缀,然后也在 View 命名空间中,后缀被删除?纯粹是风格问题吗?

最佳答案

all the views have a second version


不,他们没有。 filter_view是一种类型。 filter是一个仿函数。调用 filter仿函数,可以创建对应 filter_view的对象类型(或几乎足够)。
但您也可以调用 filter只有一个参数的仿函数:过滤谓词。这种调用的返回值是一个对象,您可以 |针对一个范围也创建一个 filter_view等效,如您链接到的页面所述:
ints | std::views::filter(even)
你不能用 filter_view 做到这一点直接地。
因此,您可以使用通用 C++ 符号创建过滤 View : filter_view(range, predicate) ,或者您可以使用更实用的谓词表示法: range | views::filter(predicate) .

关于c++ - 为什么 "The one ranges proposal"包含每个 View 的两个名称是否有特定原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62981214/

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