考虑以下情况:
std::vector<int> v{0, 1, 2, 3, 4, 5};
// 0 1 2 3 4 5
auto rng1 = std::views::all(v);
// 5 4 3 2 1 0
auto rng2 = std::views::reverse(v);
// 4 2 0
auto rng3 = std::views::filter(rng2, [](int x){return x % 2 == 0;});
有没有一种优雅的方法将这三个适配器连接成一个单一的视图,就像这样:
// 0 1 2 3 4 5 5 4 3 2 1 0 4 2 0
auto final_rng = std::views::concat(rng1, rng2, rng3);
由于rng1
、rng2
和rng3
的类型非常不同,因此似乎是不可能的。
有人能提供另一种解决方案吗?谢谢。
my_concat<rng1 的类型, rng2 的类型, rng3 的类型>
,其迭代器基本上是一个variant<rng1::iter, rng2::iter, rng3::iter>
。 - Justin