当前位置: 首页>>代码示例>>C++>>正文


C++ message::force_detach方法代码示例

本文整理汇总了C++中message::force_detach方法的典型用法代码示例。如果您正苦于以下问题:C++ message::force_detach方法的具体用法?C++ message::force_detach怎么用?C++ message::force_detach使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在message的用法示例。


在下文中一共展示了message::force_detach方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: prepare_invoke

 bool prepare_invoke(message& msg, tuple_type* out) {
   // detach msg before invoking m_fun if needed
   if (is_manipulator) {
     msg.force_detach();
   }
   intermediate_tuple it;
   detail::meta_elements<pattern> ms;
   // check if try_match() reports success
   if (!detail::try_match(msg, ms.arr.data(), ms.arr.size(), it.data)) {
     return false;
   }
   match_case_zipper zip;
   using indices_type = typename detail::il_indices<intermediate_tuple>::type;
   //indices_type indices;
   typename detail::il_take<indices_type, detail::tl_size<projections>::value - num_fun_args>::type lefts;
   typename detail::il_right<indices_type, num_fun_args>::type rights;
   has_none hn;
   // check if guards of discarded arguments are fulfilled
   auto lhs_tup = tuple_zip(zip, lefts, m_ps, it);
   if (detail::apply_args(hn, detail::get_indices(lhs_tup), lhs_tup)) {
     return false;
   }
   // zip remaining arguments into output tuple
   new (out) tuple_type(tuple_zip(zip, rights, m_ps, it));
   //tuple_type rhs_tup = tuple_zip(zip, rights, m_ps, it);
   // check if remaining guards are fulfilled
   if (detail::apply_args(hn, detail::get_indices(*out), *out)) {
     out->~tuple_type();
     return false;
   }
   return true;
 }
开发者ID:CCJY,项目名称:actor-framework,代码行数:32,代码来源:match_case.hpp

示例2: invoke

 match_case::result invoke(optional<message>& res, message& msg) override {
   intermediate_tuple it;
   detail::meta_elements<pattern> ms;
   // check if try_match() reports success
   if (!detail::try_match(msg, ms.arr.data(), ms.arr.size(), it.data)) {
     return match_case::no_match;
   }
   // detach msg before invoking m_fun if needed
   if (is_manipulator) {
     msg.force_detach();
     // update pointers in our intermediate tuple
     for (size_t i = 0; i < msg.size(); ++i) {
       // msg is guaranteed to be detached, hence we don't need to
       // check this condition over and over again via mutable_at
       it[i] = const_cast<void*>(msg.at(i));
     }
   }
   lfinvoker<std::is_same<result_type, void>::value, F> fun{m_fun};
   detail::optional_message_visitor omv;
   auto funres = apply_args(fun, detail::get_indices(it), it);
   res = omv(funres);
   return match_case::match;
 }
开发者ID:CCJY,项目名称:actor-framework,代码行数:23,代码来源:match_case.hpp


注:本文中的message::force_detach方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。