ブースト スレッド フューチャーを使用しようとしています。ここに示すように、パッケージ化された taskから共有の futureを取得できます。
だから私はLinuxでそのような機能を試します:
template <class task_return_t>
void pool_item( boost::shared_ptr< boost::packaged_task<task_return_t> > pt)
{
boost::shared_future<task_return_t> fi= pt->get_future(); // error
//...
しかし、それを呼び出すとエラーが発生します:
../../src/cf-util/thread_pool.h: In member function ‘void thread_pool::pool_item(boost::shared_ptr<boost::packaged_task<R> >) [with task_return_t = void]’:
../../src/cf-util/thread_pool.h:64:3: instantiated from ‘void thread_pool::post(boost::shared_ptr<boost::packaged_task<R> >) [with task_return_t = void]’
../../src/cf-server/server.cpp:39:27: instantiated from here
../../src/cf-util/thread_pool.h:124:58: error: conversion from ‘boost::unique_future<void>’ to non-scalar type ‘boost::shared_future<void>’ requested
以前は、そのタスクから先物を取りませんでした。すべてのソース コード、呼び出し元の場所、呼び出し元のスレッド プール。また、Windows の Visual Studio 2010 では、コンパイルして完全に動作します。
何をすればよいでしょうか?このエラーを修正または回避するにはどうすればよいですか?