C++ 20 apresenta std::ranges::iota_view
.
Pode ser usado como parte de um for
loop, por exemplo.
for (auto i: std::ranges::iota_view(0, 10))
Parece levar dois parâmetros de template. Por exemplo, o seguinte será compilado.
std::ranges::iota_view<int64_t, int64_t>(0, 10)
O primeiro parâmetro do modelo é W
which should be std::weakly_incrementable
. O segundo parâmetro do modelo é Bound
which should be std::semiregular
.
Qual é o propósito desses dois parâmetros de template? Eles podem ser usados para controlar o tipo retornado por iota_view
?
Em outras palavras, que efeito, se houver, eles têm no tipo deduzido auto i
no exemplo acima?
https://en.cppreference.com/w/cpp/ranges/iota_view <- começamos em
template<W, Bound> class iota_view
.Seu iterador é
std::ranges::iota_view<W, Bound>::iterator
E
operator *
neste iterador retorna um valor do tipoW
. Então o tipo de valor para ofor
loop é controlado pelo primeiro parâmetro de template.O
Bound
tipo é verificado para ser comparável ("fracamente-igualdade-comparável-com") comW
.