use*_*370 3 c++ range-v3 c++20
使用像我这样的惰性范围组合器,ranges::view::reverse可以为其提供单个参数(例如reverse(iota(0,3)));或者我可以使用它来调整范围operator|(例如iota(0,3) | reverse)。这种奇偶性看起来相当有规律。下面是零视图、一元视图和二元视图的示例:
#include <range/v3/all.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace ranges::view;
std::cout << (iota(0,9) | reverse) << ' ';
std::cout << reverse(iota(0,9)) << '\n';
std::cout << (iota(0,9) | chunk(4)) << ' ';
std::cout << chunk(iota(0,9),4) << '\n';
std::cout << (iota(0,9) | replace(5,0)) << ' ';
std::cout << replace(iota(0,9),5,0) << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我注意到ranges::view::zip_with组合器只能以第二种(非适配器)形式使用;例如zip_with(std::plus{},iota(0,9),iota(0,9))。zip_with是否存在无法定义为使用的技术原因operator|?range-v3 库中惰性范围组合器的参数是否有规范的排序?
我正在使用 Ranges-v3 库的最新版本 (v0.4.0)。
这是 range-v3 中非常常见的约定,r | adapter(x)与adapter(r, x). (事实上,甚至还有一种编程语言 Elixir,实际上可以直接r |> adapter(x)进行计算adapter(r, x))。
正如您所指出的,问题在于zip_with用法是:
zip_with(std::plus{},iota(0,9),iota(0,9))
Run Code Online (Sandbox Code Playgroud)
这意味着逻辑分离operator|将是:
std::plus{} | zip_with(iota(0,9),iota(0,9))
Run Code Online (Sandbox Code Playgroud)
但是,这不是左侧的范围。这是一些二元运算符。range-v3 是关于链接范围的。在所有其他情况下,它是出现在 左侧的范围|。因此,虽然这在技术上并不困难,但它似乎是一种本质上不同的事情。
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |