Function unpack_expr
boost::proto::unpack_expr — Construct an expression of the requested tag type with a domain and with children
from the specified Fusion Forward Sequence.
Synopsis
template<typename Tag, typename Sequence>
typename proto::result_of::unpack_expr<Tag, Sequence const>::type const
unpack_expr(Sequence const & sequence);
template<typename Tag, typename Domain, typename Sequence>
typename proto::result_of::unpack_expr<Tag, Domain, Sequence const>::type const
unpack_expr(Sequence const & sequence);
Description
Этот шаблон функции может быть вызван либо с, либо без указания аргумента<Domain
>. Если домен не указан, домен выводится путем изучения доменов каждого элемента последовательности. Видишь?<proto::deduce_domain
>
для полного описания используемой процедуры.
Пусть<s
>будет последовательностью случайного слияния, эквивалентной<sequence
>. Пусть<WRAP
>(N, s) [7) будет определено так, что:
Если<fusion::result_of::value_at_c<decltype(s),N>::type
>является эталонным типом или инстанциацией<boost::reference_wrapper<>
>,<WRAP
>(N, s)
эквивалентно<proto::as_child
>(fusion:::at_c(s))
.
В противном случае<WRAP
>(N, s)
эквивалентно<proto::as_expr
>(fusion::at_c(s))
.
Если<proto::wants_basic_expr
><типовое имя Домен::proto_generator>::значение
истинно, тогда пусть<E
>
будет<proto::basic_expr
>
; в противном случае пусть<E
>
будет<proto::expr
>
.
Пусть<MAKE
>(Tag, b...)
будет определено как<E
>proto::listN
>>::make(b...).
Если<Tag
><proto::tag::terminal
>
, то возвратитесь<WRAP
>(0, с)
.
В противном случае, возврат<Domain()(MAKE
>(Тэг,<WRAP
>(0, с), ...<WRAP
><N
>-1, с))
, где<N
>является размером<Sequence
>.
Параметры: |
<sequence > |
Последовательность слияний. |
|