为什么std :: function在被lambda捕获时是空的?

时间:2018-04-10 00:00:38

标签: c++ c++11 lambda std-function

我正在处理一个线程池。我有以下函数将调度工作分配给线程。

template<typename T>
Future<T> dispatchFuture(const std::function<T(void)>& work, Priority priority = Priority::Default) {
    Future<T> future;

    std::cout << !!work << std::endl;
    this->dispatch([work, future]() mutable {
        std::cout << !!work << std::endl;
        future.setValue(work());
    }, priority, false);

    return future;
}

轻松获得结果会很好,所以我写了这个函数:

std::bad_function_call

但是,调度的lambda在执行时抛出cout异常。 work语句显示dispatchFuturedispatchFuture调用中包含有效目标,但不在lambda中。

这就是threadPool.dispatchFuture<int>([]() { std::cout << "I'm a work item producing results" << std::endl; return 4 + 5; }); 被称为

的方式
{{1}}

0 个答案:

没有答案