
Sorry - didn't read your docu carefully. As you say in the docs 'However, arbitrary user-defined exception types cannot be supported.'. What about to specify an mpl::vector with arbitrary user-defined exception types? I'm using your future library siunce last year with this little modification (at least for me it works). Oliver template< typename R, typename V = mpl::vector<>
class future_wrapper { public: future_wrapper(const boost::function<R (void)> &fn, const promise<R> &ft ) : fn_(fn), ft_(ft) {}; // stores fn and ft void operator()() throw() { // executes fn() and places the outcome into ft typedef typename boost::mpl::fold< V, detail::exec_function, detail::catch_exception< boost::mpl::_1, boost::mpl::_2 > >::type exec_type; detail::catch_ellipsis< exec_type >::exec( fn_, ft_); } private: boost::function<R (void)> fn_; promise<R> ft_; }; struct exec_function { template< typename R > static void exec( boost::function< R ( void) > const& fn, boost::promise< R > & ft) { ft.set( fn() ); } static void exec( boost::function< void ( void) > const& fn, boost::promise< void > & ft) { fn(); ft.set(); } }; template< typename P, typename E > struct catch_exception { template< typename R > static void exec( boost::function< R ( void) > const& fn, boost::promise< R > & ft) { try { P::exec( fn, ft); } catch ( E const& e) { ft.set_exception( e); } } static void exec( boost::function< void ( void) > const& fn, boost::promise< void > & ft) { try { P::exec( fn, ft); } catch ( E const& e) { ft.set_exception( e); } } }; template< typename P > struct catch_ellipsis { template< typename R > static void exec( boost::function< R ( void) > const& fn, boost::promise< R > & ft) { try { P::exec( fn, ft); } catch (...) { ft.set_exception(boost::detail::current_exception() ); } } static void exec( boost::function< void ( void) > const& fn, boost::promise< void > & ft) { try { P::exec( fn, ft); } catch (...) { ft.set_exception(boost::detail::current_exception() ); } } };
Hello, is it correct that user defined exceptions thrown by the defered function object will be rethrown as as std::runtime_error (if it was derived from std::exception) or std::bad_exception? If yes - what about specifying an mpl::vector with user defined exception types (passing to future_wrapper etc.)? regards, oliver
I wanted to formally request a review of my Futures library. Latest Version: http://braddock.com/~braddock/future/
The library has matured greatly over the past year. It has been heavily used as a key component in a mid-sized commercial application on both Linux and Windows. Extensive unit tests and (just now) documentation have been written - in fact there are more than twice as many lines of test code and documentation than are in the library proper.
The library incorporates many ideas from this list, from other prospective submissions, other languages, and from academic papers.
The library does not currently use jamfiles or boostdoc (I tried I really did). It is a header-only library. The documentation is currently straight HTML, and should be very easy to translate to boostdoc if the submission looks good.
NOTE - to avoid confusion, note that there is an older 2005 boost.future candidate in the vault by Thorsten Schuett that is not related to mine (although it was studied early on).
Thanks, Braddock Gaskill braddock@braddock.com
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost