[英]Why does `ranges::view::for_each` require the functor must return a model of the `InputRange` concept?
#include <vector>
#include <algorithm>
#include <range/v3/all.hpp>
using namespace ranges;
int main()
{
auto coll = std::vector{ 1, 2, 3 };
std::for_each(coll.begin(), coll.end(), [](auto){}); // ok
coll | view::for_each([](auto){}); // static_assert failure
}
static_assert
錯誤消息:
要使用view :: for_each,函數F必須返回InputRange概念的模型。
std::for_each
采用一個返回void
的函子,為什么ranges::view::for_each
要求函子必須返回一個InputRange
概念模型?
你誤解了view::for_each()
是什么,它與std::for_each
完全不同。
view::for_each()
函數應該返回另一個范圍,然后最終的效果是所有范圍都被展平到一個很大的范圍。
例如:
auto res = coll | view::for_each([](auto n){ return yield_from(view::ints(0, n)); });
每個元素的返回范圍分別為{0}
, {0, 1}
, {0, 1, 2}
。 res
將是扁平的: {0, 0, 1, 0, 1, 2}
0,0,1,0,1,2 {0, 0, 1, 0, 1, 2}
std::for_each
的對應部分是ranges::for_each
:
ranges::for_each(coll, [] (auto) {})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.