Как переместить лямбду, захватывающую некопируемый объект, в функцию std::function? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как переместить лямбду, захватывающую некопируемый объект, в функцию std::function? [дубликат]

Сообщение Гость »


В моем коде на C++ я определил класс test_t, который отключает операторы копирования и присваивания, разрешая только операции перемещения. Затем я создал лямбда-выражение f, захватывающее объект a типа test_t, и переместил его в лямбда-выражение. Теперь я хочу переместить это лямбда-выражение f в объект std::function, чтобы передать его в функцию func_a.
Однако я обнаружил ошибку компиляции, указывающую, что Я не могу переместить f в std::function. Как решить эту проблему?
c++20

Код: Выделить всё

#include 

class test_t {
public:
test_t() = default;
~test_t() = default;

test_t(const test_t&) = delete;
auto operator=(const test_t&) = delete;

test_t(test_t&& other) noexcept = default;
auto operator=(test_t&& other) noexcept -> test_t & = default;
};

auto func_a(std::function f) {
}

int main() {
test_t a;
auto f = [b = std::move(a)]() mutable {};
auto f2 = std::move(f); // ok
//func_a(std::move(f)); // error
}


Источник: https://stackoverflow.com/questions/781 ... tdfunction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»