cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Emplace iterators #275

Open Neargye opened 3 years ago

Neargye commented 3 years ago

Перенос предложения: голоса +2, -0 Автор идеи: Nate Reinar Windwood

std::emplacer() -> std::emplace_iterator
std::back_emplacer() -> std::back_emplace_iterator
std::front_emplacer() -> std::front_emplace_iterator

Пример реализации: back_emplacer.

Neargye commented 3 years ago

Antervis 25 апреля 2019, 16:22 emplace_iterator кажется не самой практичной идеей. Он не сможет удобно покрыть случай, когда T конструируется из нескольких аргументов, а если T конструируется из одного, то и copy/move итераторы подойдут, не так ли?

Nate Reinar Windwood 25 апреля 2019, 23:00 Antervis, а если из одного аргумента другого типа? Он гарантированно вызовет конструктор (при наличии), а не вывалится на компиляции?

Ну и, как минимум, бывают explicit конструкторы.

Если заполняешь контейнер каким-нибудь transform, совершенно не улыбается лишний раз оборачивать функцию в лямбду с явным вызовом конструктора. К тому же, это дублирование информации о типе. Контейнер и сам знает, что в нем хранится.