move-only функторы?
А зачем оно?
просто потому, что std::function задумывался как интерфейс копируемого функционального объекта. В C++23 завезут move-only версию.
Зачем уметь в такое? А зачем std::move_only_function придумали?
так реализовано, концептуально ограничений нет сделать для move only, и даже есть реализации
Традиционно в STL все функторы копируются, видимо, чтобы не хранить их по ссылке, поскольку в момент выполнения алгоритма сылка на (например временный) объект функтора может протухнуть. Поэтому и function смоделирован так же
Потом, ты же можешь и обычное копирование сделать перемещающим, никто не мешает.
packaged_task, например, по понятным причинам объект не копируемый. Это не позволяет тебе запихнуть его в function. не знаю как у остальных, а у меня на практике это основная причина головной боли.
Так это же нарушит договоренности?
копирующий конструктор const ссылку принимает
А зачем его в function?
Так человек ожидал что щас скопируется, а у него данные пропали и программа падать стала
Ну вот хочешь ты написать функцию InvokeOnMainThreadAsync. Как будешь хранить задачи?
Блин, что он там не ожидал, если сам этот класс пишет?
Да. Очень странно будет после копирования потерять какой-нибудь юник
Обсуждают сегодня