Rangesv3 использует систему типов для хранения информации об операциях.Это делает вещи очень эффективными во время выполнения, так как компилятор знает, что происходит с данными при их переходе от одного шага к другому.
Чтобы сделать то, что вы хотите, вам нужно стереть типинформация и забудьте ее.
Для этого у них есть различные any_view
с.«any_input_view<int>
» может хранить терминал канала, который будет выводить int
s.
Если у вас есть преобразование double_values
, которое, ну, в общем, удваивает значения, вы можете сделать:
any_input_view<int> double_the_view( any_input_view<int> in ) {
return std::move(in) | double_values;
}
обратите внимание, однако, что каждый такой этап имеет снижение производительности по сравнению с нетипированной стертой версией.