В моем коде на 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
Мобильная версия