gpt4 book ai didi

c++ - 传递捕获 unique_ptr 的 lambda

转载 作者:行者123 更新时间:2023-11-30 01:37:28 30 4
gpt4 key购买 nike

我正在使用 lambda 广义捕获将 unique_ptr 移动到 lambda ( https://stackoverflow.com/a/16968463/118958 ) 中。我想将此 lambda 传递到其他地方以设置回调函数,但我不确定如何传递。

这是一个小例子,说明我正在尝试执行的操作无法编译:

void set_callback(std::function<void(void)> cb);
void move_callback(std::function<void(void)> &&cb);

void test() {
auto a_ptr = std::make_unique<int>(10);
auto lambda = [a_ptr = std::move(a_ptr)] () {};

// set_callback(lambda); // I understand why this wouldn't work
move_callback(std::move(lambda)); // but I would expect this to be OK
}

关于如何执行上述操作的任何想法?

最佳答案

std::function必须同时是 CopyConstructible 和 CopyAssignable,这意味着它必须能够复制其目标。不幸的是,由于您的 lambda 不可复制,因此您无法将其存储在 std::function 中。

您将不得不求助于可调用类型删除的另一种实现,它适用于仅可移动的对象。

关于c++ - 传递捕获 unique_ptr 的 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49647553/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com