簡體   English   中英

為什么`range :: view :: for_each`要求函子必須返回`InputRange`概念的模型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM