exceptions.hpp

来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 1,741 行 · 第 1/4 页

HPP
1,741
字号
template <class TryArg, class Catch1, class LF1,                         class Catch2, class LF2,                         class Catch3, class LF3,                         class Catch4, class LF4>inline const lambda_functor<   lambda_functor_base<     action<      5,       try_catch_action<        catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, Catch4>       >     >,     tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4>   > >try_catch(  const lambda_functor<TryArg>& a1,   const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,  const tagged_lambda_functor<detail::exception_catch_tag<Catch4>, LF4>& a5) {   return       lambda_functor_base<         action<          5,           try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, Catch4> >         >,         tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4>      >     ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4>(a1, a2, a3, a4, a5));}template <class TryArg, class Catch1, class LF1,                         class Catch2, class LF2,                         class Catch3, class LF3,                         class Catch4, class LF4,                         class Catch5, class LF5>inline const lambda_functor<   lambda_functor_base<     action<      6,       try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, Catch5> >    >,     tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5>  > >try_catch(  const lambda_functor<TryArg>& a1,   const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,  const tagged_lambda_functor<detail::exception_catch_tag<Catch5>, LF5>& a6) {   return       lambda_functor_base<          action<           6,            try_catch_action<             catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, Catch5>            >          >,          tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5>      >     ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5>        (a1, a2, a3, a4, a5, a6)    );}template <class TryArg, class Catch1, class LF1,                         class Catch2, class LF2,                         class Catch3, class LF3,                         class Catch4, class LF4,                         class Catch5, class LF5,                         class Catch6, class LF6>inline const lambda_functor<   lambda_functor_base<     action<      7,       try_catch_action<        catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, Catch6>       >     >,     tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6>  > >try_catch(  const lambda_functor<TryArg>& a1,   const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,  const tagged_lambda_functor<detail::exception_catch_tag<Catch6>, LF6>& a7) {   return       lambda_functor_base<         action<          7,           try_catch_action<            catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>,Catch6>           >         >,         tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6>      >     ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6>        (a1, a2, a3, a4, a5, a6, a7));}template <class TryArg, class Catch1, class LF1,                         class Catch2, class LF2,                         class Catch3, class LF3,                         class Catch4, class LF4,                         class Catch5, class LF5,                         class Catch6, class LF6,                        class Catch7, class LF7>inline const lambda_functor<   lambda_functor_base<     action<      8,       try_catch_action<        catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, Catch7>       >     >,     tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7>  > >try_catch(  const lambda_functor<TryArg>& a1,   const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch6> >, LF6>& a7,  const tagged_lambda_functor<detail::exception_catch_tag<Catch7>, LF7>& a8) {   return       lambda_functor_base<         action<          8,           try_catch_action<            catch_action<              detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, Catch7            >           >         >,         tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7>      >     ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7>        (a1, a2, a3, a4, a5, a6, a7, a8));}template <class TryArg, class Catch1, class LF1,                         class Catch2, class LF2,                         class Catch3, class LF3,                         class Catch4, class LF4,                         class Catch5, class LF5,                         class Catch6, class LF6,                         class Catch7, class LF7,                         class Catch8, class LF8>inline const lambda_functor<   lambda_functor_base<     action<      9,       try_catch_action<        catch_action<          detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, Catch8        >       >     >,     tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8>  > >try_catch(  const lambda_functor<TryArg>& a1,   const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch6> >, LF6>& a7,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch7> >, LF7>& a8,  const tagged_lambda_functor<detail::exception_catch_tag<Catch8>, LF8>& a9) {   return       lambda_functor_base<         action<          9,          try_catch_action<            catch_action<              detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, Catch8            >           >         >,         tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8>       >     ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8>        (a1, a2, a3, a4, a5, a6, a7, a8, a9));}template <class TryArg, class Catch1, class LF1,                         class Catch2, class LF2,                         class Catch3, class LF3,                         class Catch4, class LF4,                         class Catch5, class LF5,                         class Catch6, class LF6,                         class Catch7, class LF7,                         class Catch8, class LF8,                         class Catch9, class LF9>inline const   lambda_functor<     lambda_functor_base<       action<         10,         try_catch_action<          catch_action<             detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, detail::catch_block<Catch8>,              Catch9          >         >       >,       tuple<        lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8, LF9      >    >   >try_catch(  const lambda_functor<TryArg>& a1,   const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch6> >, LF6>& a7,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch7> >, LF7>& a8,  const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch8> >, LF8>& a9,  const tagged_lambda_functor<detail::exception_catch_tag<Catch9>, LF9>& a10) {   return       lambda_functor_base<         action<          10,           try_catch_action<             catch_action<              detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, detail::catch_block<Catch8>,               Catch9            >           >         >,         tuple<          lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8, LF9        >      >     ( tuple<        lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8, LF9      >(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));}// ---------------------------------------------------------------------------// Specializations for lambda_functor_base of try_catch ----------------------// 1 catch type casetemplate<class Args, class Catch1>class lambda_functor_base<  action<2, try_catch_action<catch_action<detail::catch_block<Catch1> > > >,   Args> {public:  Args args;public:  explicit lambda_functor_base(const Args& a) : args(a) {}// the return type of try_catch is the return type of the try lambda_functor// (the return types of try and catch parts must match unless try returns void// or the catch part throws for sure)  template <class SigArgs> struct sig {    typedef typename       as_lambda_functor<            typename boost::tuples::element<0, Args>::type       >::type lf_type;    typedef typename lf_type::inherited::template sig<SigArgs>::type type;    };  template<class RET, CALL_TEMPLATE_ARGS>  RET call(CALL_FORMAL_ARGS) const {    try     {      return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);    }    catch (Catch1& e)    {                      return        detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>               ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);    }  }};template<class Args>class lambda_functor_base<action<2, try_catch_action<catch_action<detail::catch_all_block> > >, Args> {public:  Args args;public:  explicit lambda_functor_base(const Args& a) : args(a) {}  template <class SigArgs> struct sig {    typedef typename       as_lambda_functor<            typename boost::tuples::element<0, Args>::type       >::type lf_type;    typedef typename lf_type::inherited::template sig<SigArgs>::type type;    };  template<class RET, CALL_TEMPLATE_ARGS>  RET call(CALL_FORMAL_ARGS) const {    try     {      return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);      }    catch (...)    {                      return         detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>               ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);    }  }};// 2 catch types casetemplate<class Args, class Catch1, class Catch2>class lambda_functor_base<action<3, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2> > > >, Args> {public:  Args args;public:  explicit lambda_functor_base(const Args& a) : args(a) {}  template <class SigArgs> struct sig {    typedef typename       as_lambda_functor<            typename boost::tuples::element<0, Args>::type       >::type lf_type;    typedef typename lf_type::inherited::template sig<SigArgs>::type type;    };  template<class RET, CALL_TEMPLATE_ARGS>  RET call(CALL_FORMAL_ARGS) const {    try     {      return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);      }    catch (Catch1& e)    {       return         detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>               ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);    }    catch (Catch2& e)    {                return         detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>               ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);    }  }};template<class Args, class Catch1>class lambda_functor_base<action<3, try_catch_action<catch_action<detail::catch_block<Catch1>,detail::catch_all_block> > >, Args> {public:  Args args;public:  explicit lambda_functor_base(const Args& a) : args(a) {}  template <class SigArgs> struct sig {    typedef typename       as_lambda_functor<            typename boost::tuples::element<0, Args>::type       >::type lf_type;    typedef typename lf_type::inherited::template sig<SigArgs>::type type;    };  template<class RET, CALL_TEMPLATE_ARGS>  RET call(CALL_FORMAL_ARGS) const {    try     {      return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);      }    catch (Catch1& e)    {                      return         detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>               ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);    }    catch (...)    {                      return         detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>               ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS);    }  }};// 3 catch types casetemplate<class Args, class Catch1, class Catch2, class Catch3>class lambda_functor_base<action<4, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3> > > >, Args> {public:  Args args;public:  explicit lambda_functor_base(const Args& a) : args(a) {}  template <class SigArgs> struct sig {    typedef typename       as_lambda_functor<            typename boost::tuples::element<0, Args>::type       >::type lf_type;    typedef typename lf_type::inherited::template sig<SigArgs>::type type;    };

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?