Как получить исключение, сообщаемое для boost :: future? - PullRequest
7 голосов
/ 18 июля 2011

Если я использую Boost futures и будущие отчеты верны has_exception (), есть ли способ получить это исключение? Например, вот следующий код:

int do_something() {
    ...
    throw some_exception();
    ...  
}

...

boost::packaged_task task(do_something);
boost::unique_future<int> fi=task.get_future();
boost::thread thread(boost::move(task));
fi.wait();
if (fi.has_exception()) {
    boost::rethrow_exception(?????);
}
...

Вопрос в том, что нужно поставить на место "?????"?

1 Ответ

8 голосов
/ 18 июля 2011

Согласно http://groups.google.com/group/boost-list/browse_thread/thread/1340bf8190eec9d9?fwc=2, вам нужно сделать это вместо:

#include <boost/throw_exception.hpp>

int do_something() {
    ...
    BOOST_THROW_EXCEPTION(some_exception());
    ...  
}

...
try
{
  boost::packaged_task task(do_something);
  boost::unique_future<int> fi=task.get_future();
  boost::thread thread(boost::move(task));
  int answer = fi.get(); 
}
catch(const some_exception&)
{ cout<< "caught some_exception" << endl;}
catch(const std::exception& err)
{/*....*/}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...