Нужно то же самое, только для вариадик параметр паков:
template <typename...T>
auto make_foo(T&&...t) {
return [/* вот здесь нужен захват по значению с форвардингом */](/*...*/) { /*...*/ };
}
Искал, но не нашел. Выкручиваюсь через туплы — сначала запаковка, потом распаковка — жутко надоедливое занятие. Трудно поверить, что эту возможность выпустили из виду. Может, все-таки, что-то предусмотрено на этот случай, просто я не знаю?
P.S. Захват по ссылке не предлагать.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Искал, но не нашел. Выкручиваюсь через туплы — сначала запаковка, потом распаковка — жутко надоедливое занятие. Трудно поверить, что эту возможность выпустили из виду. Может, все-таки, есть такая возможность, просто я не знаю?
Здравствуйте, Kernan, Вы писали:
K>А для чего такое можно использовать и насколько это быстро?
Это нужно для оптимального захвата по значению в лямбдах. В одном списке фактических параметров могут одновременно присутствовать как lvalue, так и rvalue выражения. Этот подход обеспечивает при захвате перемещение для перемещаемых объетов и копирование для неперемещаемых. Особенно это актуально в тех случаях, когда во входных параметрах присутствуют объекты классов, для которых копирование запрещено, таких как std::unique_ptr, например.
--
Справедливость выше закона. А человечность выше справедливости.