момент в реализации вызова колбека. Когда выполняется запрос на остановку потока - т.е. через request_stop(), выполняется вызов execute:
static void execute(Stop_callback* that) noexcept {
Callback& cb = static_cast<Callback_impl*>(that)->_M_cb;
std::forward<Callback>(cb)();
}
Я не совсем понимаю почему выполняется вызов operator() совместно с std::forward.
Есть предположение, что это сделано чтобы различать ситуации, когда передана некоторая функция с типом void(Stop_callback*) noexcept, от случая когда в конструкторе stop_callback создаем соответствующую лямбду?
на случай перегрузки оператора () для & &&
Callback может быть reference type
Если callback - Ty, то здесь вызовется перегрузка оператора для &&, если Ty& - для &
факт что тип колбека может быть референс тайпом я упустил. Спасибо.
Обсуждают сегодня