C++03 + boost で C++0x の async
適当なワードで検索すると
https://svn.boost.org/trac/boost/ticket/4710
とかがひっかかると思うんですが、このコードは動きません。unique_future の寿命延びたりしないのでダメです。
ということで shared_future 返すようにしましょう。
#include <boost/thread.hpp> #include <boost/utility/result_of.hpp> template <class F> boost::shared_future<typename boost::result_of<F()>::type> async(F f) { typedef typename boost::result_of<F()>::type R; boost::packaged_task<R> pt( f ); boost::shared_future<R> ret = boost::move(pt.get_future()); boost::thread( boost::move(pt) ).detach(); return ret; }
多分こんな感じです。
手元に vs2010 の express しかないので試せない…03 モードとかないのか…