In my answer here, Barry pointed out that it's better to call views::transform(&Planter::getPlants)
because views::transform([](Planter const& planter){...
accidentally copies.
#if 1
auto plants = planters
| std::views::transform([](Planter const& planter){ return planter.getPlants();})
| std::views::join
| std::views::common
;
// Plant copy constructor
// Plant copy constructor
// Plant copy constructor
// Plant copy constructor
// Plant copy constructor
#else
auto plants = planters
| std::views::transform(&Planter::getPlants)
| std::views::join
;
#endif
// Plant copy constructor
// Plant copy constructor
Here Plant
is a wrapper around int
and Planter
is a wrapper around std::vector<int>
.