0

我想实现这样的方法:

boost::unique_future<int> foo()
{
    return defer([=] // call this lambda on boost::unique_future<int>::get();
    {
         return prime(10);
    });
}

我知道boost::promiseand boost::packaged_taskset_wait_callback但是,由于返回的未来引用了这将不起作用?

我知道有std::asyncand std::launch::sync,但是如何使用 boost 和 vs2010 来模拟它?

std::unique_future<int> foo()
{
    return std::async(std::launch::sync, [=] 
    {
         return prime(10);
    });
}
4

2 回答 2

2

可以使用set_wait_callback,您只需动态分配承诺,并在设置值后在回调中将其删除:

#include <boost/thread.hpp>
#include <iostream>

void callback(boost::promise<int>&p) {
    std::cout<<"callback"<<std::endl;
    p.set_value(42);
    delete &p;
}

boost::unique_future<int> f()
{
    boost::promise<int> *p=new boost::promise<int>;
    p->set_wait_callback(callback);
    return p->get_future();
}

int main()
{
    boost::unique_future<int> uf(f());
    std::cout<<"main()"<<std::endl;
    int val=uf.get();
    std::cout<<"val="<<val<<std::endl;
}
于 2012-01-31T12:10:24.760 回答
0

您可以使用这张票的代码:https ://svn.boost.org/trac/boost/ticket/4710

于 2012-01-23T01:31:46.293 回答