在 lambda 中包装并执行 packaged_task

Wrap and execute packaged_task inside lambda

我正在尝试将 packaged_task 包裹在 lambda 中,以便将它们存放在容器中。我在下面写了一个测试代码来模拟包装和调用 lambda 函数。我的代码如下:

int test()
{
    return 10;
}

int main()
{
    auto task = std::make_shared<std::packaged_task<int()>>(test);
    auto result = task->get_future();
    auto wrapper = [=]() { (*task)(); };
    wrapper();
}

程序因以下异常而中止:

在抛出 'std::system_error' 的实例后调用终止 什么():未知错误-1 已中止(核心已转储)

谁能解释一下为什么抛出异常?

std::packaged_task::operator()间接使用std::call_once,根据link,需要pthread库才能操作,否则抛出std::system_error。所以要摆脱这个异常,你需要用-lpthread构建。听起来很奇怪,但对我有用。