2011-07-18 19 views
6

यदि मैं बूस्ट वायदा का उपयोग करता हूं, और भविष्य की रिपोर्ट 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(?????); 
} 
... 

सवाल यह है कि "?????" के स्थान पर क्या रखा जाना चाहिए?

+0

डॉक्स 'has_exception' के लिए कहते हैं:' अगर सही है * इस एक अतुल्यकालिक परिणाम के साथ जुड़ा हुआ है, कि परिणाम पुनः प्राप्ति के लिए तैयार है, और परिणाम एक संग्रहीत अपवाद है '। लेकिन दस्तावेज़ीकरण का यह बड़ा हिस्सा यह नहीं कहता कि इसे कैसे प्राप्त करें .... – CharlesB

+0

क्या आपने बस 'fi.get() 'की कोशिश की है? – Nim

उत्तर

7

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) 
{/*....*/} 
... 
+0

धन्यवाद। इस बीच मुझे स्रोत कोड को देखते हुए जवाब मिला। असल में, मैंने इसे पर्याप्त रूप से छिपे हुए तरीके से, दस्तावेज़ में लिखा है। – petersohn

संबंधित मुद्दे