Boost C++ 库

...世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

结构体 _ - Boost C++ 函数库
PrevUpHomeNext

结构体 _

boost::proto::_ — 一个通配符语法元素,可以匹配任何表达式,并且一个转换器,返回当前表达式不变。

提要

// In header: <boost/proto/matches.hpp>


struct _ :  proto::transform<_> {
  // types
  typedef _ proto_grammar;

  // member classes/structs/unions
  template<typename Expr, typename State, typename Data> 
  struct impl :  proto::transform_impl<Expr, State, Data> {
    // types
    typedef Expr result_type;

    // public member functions
    Expr operator()(typename impl::expr_param, typename impl::state_param, 
                    typename impl::data_param) const;
  };
};

描述

通配符类型 proto::_ 是一个语法元素,使得 proto::matches<E, proto::_>::value 对于任何表达式类型 E 均为 true

通配符也可以用作匹配终结符时的模板参数占位符。例如,以下是一个可以匹配任何 std::complex<> 终结符的语法

BOOST_MPL_ASSERT((
  proto::matches<
    proto::terminal<std::complex<double> >::type,
    proto::terminal<std::complex< proto::_ > >
  >
));

当用作转换器时,proto::_ 返回当前表达式不变。例如,在以下示例中,proto::_proto::fold<> 转换器一起使用,以折叠节点的子节点

struct CountChildren :
  proto::or_<
    // Terminals have no children
    proto::when<proto::terminal<proto::_>, mpl::int_<0>()>,
    // Use proto::fold<> to count the children of non-terminals
    proto::otherwise<
      proto::fold<
        proto::_, // <-- fold the current expression
        mpl::int_<0>(),
        mpl::plus<proto::_state, mpl::int_<1> >()
      >
    >
  >
{};


PrevUpHomeNext